/* Matura6.java */
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class Matura6
extends Applet
implements ActionListener, AdjustmentListener
{
int height = 540; // Fenstergrösse ( aus der HTML-Datei)
int width = 800;
int ground = height - 100; //Der Boden
int xstart = 45; // Startwerte
int ystart = ground;
double v = 14.5; // Geschwindigkeit
double winkel = 45; // Standartwinkel
double t = 0.01; // Zeitschritt (Genauigkeit der Darstellung)
int ZZ = 1;
int faktor = 40; // 1 Meter entspricht [faktor] Pixel
int versuch = 1;
int xziel = 600;
int yziel = 300;
int abstand = 0;
int s = 581;
double masse = 0.34;
double beta = 0;
Graphics g; // das grafische wird hier definiert, welches später von public void init() abgerufen wird
Scrollbar scrollwinkel=new Scrollbar(Scrollbar.HORIZONTAL,(int)winkel,20,0,110);
Scrollbar scrollv=new Scrollbar(Scrollbar.HORIZONTAL,(int)v,20,0,45);
Label daten = new Label();
Label lb_v = new Label("Geschwindigkeit in [m/s]");
Label lb_winkel = new Label("Winkel in Grad [°]");
public void draw(Graphics g){
double fx, fy;
double fallbeschl = 9.81; //Fallbeschleunigung
double xold, yold;
double x, y, vx, vy, ax, ay;
vx = v * Math.cos(winkel/180*Math.PI); //als double definiert was heissen soll, dass mit vx weit hinter der Kommastelle gerechnet werden soll
vy = -v * Math.sin(winkel/180*Math.PI);
x = xstart; //siehe oben die Definition von xstart bzw. ystart
y = ystart;
int farbe = 0;
do{
xold = x;
yold = y;
fx = -beta*(Math.sqrt(vx*vx+vy*vy)*vx); //Geschwindigkeit * Geschwindigkeit= Masse * Beschleunigung-->neue Kraft in x-Richtung
fy = beta*(Math.sqrt(vx*vx+vy*vy)*vy)-masse*fallbeschl; //neue Kraft in y-Richtung
ax = fx/masse; //neue x-Beschleunigung
ay = fy/masse; //neue y-Beschleunigung
vx = vx + ax*t; //neue x-Geschwindigkeit
vy = vy - ay*t; //neue y-Geschwindigkeit
x = x + vx * t; //neue x-Koordinate
y = y + vy * t; //neue y-Koordinate
if (farbe==0){ g.setColor(Color.green); farbe = 1;} //Farbwechsel
else{ g.setColor(Color.yellow); farbe = 0;}
g.drawLine((int) Math.round((xold - xstart)*faktor + xstart), //Anfang der Zeichnung nach x
(int) Math.round((yold - ystart)*faktor + ystart),
(int) Math.round((x - xstart)*faktor + xstart), //Schluss der Zeichnung nach x
(int) Math.round((y - ystart)*faktor + ystart));
try{
Thread pause = new Thread(); //eigenständiges Programmfragment, das parallel zu anderen Threads laufen kann (thread = Faden)
pause.sleep(ZZ); // pause.sleep ist sozusagen die Zeit welche es braucht um die Parabel zu zeichnen, und ZZ beschreibt nach welcher Zeit das Thread fertig ist
}catch(InterruptedException e) {} //Abbruchsausnahme
}while ( (y - ystart)*faktor + ystart <= ystart);
abstand = (int)((x - xstart)*faktor);
}
Button knopf = new Button("Schuss!");
Button reset = new Button("Reset");
public void init(){
g = getGraphics();
setLayout(null);
setSize(width, height);
setBackground( new Color(102,204,255));
knopf.setBounds(50,10,120,25);
reset.setBounds(180,10,100,25);
add(knopf);
add(reset);
scrollwinkel.setBounds(70,ground + 70,120,20);
scrollv.setBounds(70,ground + 40,120,20);
add(scrollwinkel);
add(scrollv);
scrollv.addAdjustmentListener(this);
scrollv.addAdjustmentListener(this);
knopf.addActionListener(this);
reset.addActionListener(this);
daten.setBounds(70,ground + 10,470, 20);
lb_winkel.setBounds(200,ground + 70,150, 20);
lb_v.setBounds(200,ground + 40,200,20);
add(daten);
add(lb_winkel);
add(lb_v);
}
public void actionPerformed(ActionEvent e){ //actionPerformed ist hier für die Knöpfe zuständig z.B. wenn Reset gedrückt wird dann wird die Funktion reset() aktiviert(siehe unten)
if(e.getSource()==knopf){
versuch++;
draw(g);
}
if(e.getSource()==reset){
reset();
}
}
public void adjustmentValueChanged(AdjustmentEvent e){ //adjustmentVC soll das Scrollen ermöglichen und update() heisst einfach, dass die neuen Werte sich anpassen müssen(siehe weiter unten)
winkel = scrollwinkel.getValue();
v = scrollv.getValue();
}
public void reset() //hier ist reset definiert, welches auf den button Reset reagiert
{
versuch = 1;
abstand = 0;
g.clearRect(0,0,width,height);
paint(g);
}
}
öhm auf die // müsst ihr nicht achten .. is für mich

damit ich alles verstehe