L
Lucci
Gast
Hallo zusammen .. ich bins wieder mal:S
Ich hab mal weiter gemacht an dem, was ich von euch bekommen habe und mein Ziel war es einen Pfeil zu zeichnen der sich mit der Kugel bewegt, aber irgendwie kann es nicht mit der paint und der draw-Methode funzen wie schon mit der Kugel. Hab schon vieles probiert .. hoffentlich könnt ihr mir weiterhelfen
mfg Lucci
ps:
Dieser Beitrag wurde von L-ectron-X am 13.10.2008 um 15:28 Uhr editiert.
Code-Tags gesetzt
Ich hab mal weiter gemacht an dem, was ich von euch bekommen habe und mein Ziel war es einen Pfeil zu zeichnen der sich mit der Kugel bewegt, aber irgendwie kann es nicht mit der paint und der draw-Methode funzen wie schon mit der Kugel. Hab schon vieles probiert .. hoffentlich könnt ihr mir weiterhelfen
mfg Lucci
ps:
Code:
/* Matura23.java */
import java.awt.event.*;
import java.applet.*;
import java.awt.*;
import java.util.Random;
public class Matura23 extends Applet implements ActionListener, AdjustmentListener
{
// hier werden alle Elemente der Formel und der Datei selber definiert
int height = 540; // Fenstergrösse ( aus der HTML-Datei)
int width = 1000;
int ground = height - 100; // Der Boden
int xstart = 45; // Startwerte
int ystart = ground; // normales Koordinatensystem nicht das welches für Java gewöhnlich ist
int xkreis = 40;
int ykreis = 435;
double v = 14.5; // Geschwindigkeit
double winkel = 45; // Standartwinkel
double t = 0.01; // Zeitschritt (Genauigkeit der Darstellung)
int zz = 10;
int faktor = 15; // 1 Meter entspricht [faktor] Pixel
int versuch = 1;
int xziel = 600;
int yziel = 300;
int abstand = 0;
int s = 581;
int u = 650;
double cw = 0.000286;
int höhe = 0;
int r = 10;
double beta = 0;
double beta1 = 0.030114; // Widerstandswert
double masse1 = 1;
double masse = 0; // Masse des Fussballs
int maxabstand = 0; // Ausrechnen der Maxweite
int maxwinkel = 0;
int[] m;
int[] p;
// Globale Variablen für grafische Elemente
Button knopf = new Button("Start"); // Knopf für den Schuss
Button bt_reset = new Button("Reset");
Label daten = new Label();
Label lb_v = new Label("Geschwindigkeit in [m/s]"); // Anzeige für die Geschwindigkeit
Label lb_winkel = new Label("Winkel in Grad [°]");
Label lb_masse = new Label("Masse in [kg]");
Label lb_beta = new Label("Widerstandswert");
Label lb_r = new Label("Durchmesser");
Scrollbar scrollwinkel = new Scrollbar(Scrollbar.HORIZONTAL, (int) winkel, 20, 0, 110); // für den Winkel zum scrollen
Scrollbar scrollv = new Scrollbar(Scrollbar.HORIZONTAL, (int) v, 20, 0, 45);
Scrollbar scrollmasse1 = new Scrollbar(Scrollbar.HORIZONTAL, (int) masse1, 20, 0, 40);
Scrollbar scrollr = new Scrollbar(Scrollbar.HORIZONTAL,(int)r,20,0,80);
Checkbox widerstand = new Checkbox("Luftwiderstand", true); // Widerstand , eine Box in der man einen Haken hinterlässt und die so aktiviert wird
Checkbox mass = new Checkbox("Masse",true);
CheckboxGroup body = new CheckboxGroup();
// Parabelwerte
double fx, fy;
double fallbeschl = 9.81; // Fallbeschleunigung
double xold, yold;
double x, y, vx, vy, ax, ay;
double va;
int farbe = 0;
Polygon fluglinie = new Polygon(); // Fluglinie
Polygon gewichtskraft = new Polygon();
Thread calcThread;
boolean reset;
// Eigentliche Parabelfunktion
public void draw()
{
calcThread = new Thread()
{
@Override
public void run()
{
va = v;
vx = v * Math.cos(winkel / 180 * Math.PI); // x-Abschnitt der Parabel
vy = -v * Math.sin(winkel / 180 * Math.PI); // y-Abschnitt der Parabel
x = xstart; // in welchen Punkten es starten soll
y = ystart;
int[] arp = {(int)Math.round((x - xstart) * faktor + xstart),(int)Math.round((x - xstart) * faktor + xstart),(int)Math.round((x - xstart) * faktor + xstart)-5,(int)Math.round((x - xstart) * faktor + xstart)+5,(int)Math.round((x - xstart) * faktor + xstart),(int)Math.round((x - xstart) * faktor + xstart)};
int[] arm = {(int)Math.round((y - ystart) * faktor + ystart),(int)Math.round((y - ystart) * faktor + ystart)+10,(int)Math.round((y - ystart) * faktor + ystart)+10,(int)Math.round((y - ystart) * faktor + ystart)+15,(int)Math.round((y - ystart) * faktor + ystart)+10,(int)Math.round((y - ystart) * faktor + ystart)+10,(int)Math.round((y - ystart) * faktor + ystart)};
fluglinie = new Polygon(); // Fluglinie zurüecksetzen
gewichtskraft = new Polygon();
do
{ // der Befehl do{} lässt die Parabel erscheinen , aber ohne Knopfdruck läuft nix ... siehe weiter unten!
xold = x;
yold = y;
fx = -beta * (Math.sqrt(vx * vx + vy * vy) * vx); // neue Kraft in x-Richtung (inkl. Luftwiderstand)
fy = beta * (Math.sqrt(vx * vx + vy * vy) * vy) - masse * fallbeschl; // neue Kraft in y-Richtung
ax = fx / masse; // neue x-Beschl.
ay = fy / masse; // neue y-Beschl.
vx = vx + ax * t; // neue x-Geschw.
vy = vy - ay * t; // neue y-Geschw.
x = x + vx * t; // neue x-Koordinate
y = y + vy * t; // neue y-Koordinate
höhe = (int) (Math.pow(v, 2) * Math.pow(Math.sin(winkel / 180 * Math.PI), 2) / (2 * fallbeschl) * faktor);
fluglinie.addPoint((int) Math.round((x - xstart) * faktor + xstart), (int) Math.round((y - ystart) * faktor + ystart));
gewichtskraft.addPoint((int) Math.round((x - xstart) * faktor + xstart), (int) Math.round((y - ystart) * faktor + ystart));
repaint();
try
{
sleep(zz);
}
catch (InterruptedException e)
{
}
if(reset)break;
}
while ((y - ystart) * faktor + ystart <= ystart);
abstand = (int) ((x - xstart) * faktor);
update();
if (abstand == s)
{ // Benutzer hat Tor getroffen
lb_v.setText("Geschwindigkeit in [m/s]");
}
}
};
calcThread.start();
}
// Initialisierungsfunktion wird beim Applet-Start aufgerufen
public void init()
{ // für das Applet : Hintergrundfarbe, wo es Bilder herholen soll, die eigentlichen Scrolls(also ihre Koordinaten) usw.
setLayout(null);
setSize(width, height);
setBackground(new Color(102, 204, 255));
daten.setBounds(70, ground + 10, 900, 20);
lb_winkel.setBounds(200, ground + 70, 150, 20);
lb_v.setBounds(200, ground + 40, 200, 20);
lb_masse.setBounds(500, ground + 40, 150, 20);
lb_beta.setBounds(500, ground + 70, 150, 20);
lb_r.setBounds(800,ground + 70,150,20);
knopf.setBounds(50, 10, 120, 25); // Positionen und Grössen der Elemente
bt_reset.setBounds(180, 10, 100, 25);
scrollwinkel.setBounds(70, ground + 70, 120, 20);
scrollv.setBounds(70, ground + 40, 120, 20);
scrollmasse1.setBounds(370, ground + 40, 120, 20);
scrollr.setBounds(670,ground +70,120,20);
widerstand.setBounds(670,ground + 40,120,20);
mass.setBounds(800,ground + 40,120,20);
add(daten);
add(scrollwinkel);
add(scrollv); // zeichne Elemente
add(scrollmasse1);
add(scrollr);
add(knopf);
add(bt_reset);
add(widerstand);
add(mass);
add(lb_winkel);
add(lb_v);
add(lb_masse);
add(lb_beta);
add(lb_r);
knopf.addActionListener(this); // zu überwachende Elemente
bt_reset.addActionListener(this);
scrollwinkel.addAdjustmentListener(this);
scrollv.addAdjustmentListener(this);
scrollmasse1.addAdjustmentListener(this);
scrollr.addAdjustmentListener(this);
update();
}
// Überwacht die Buttons auf Clicks
public void actionPerformed(ActionEvent e)
{
if (mass.getState())
{
masse = masse1;
beta = beta1;
}
if (!widerstand.getState())
{
beta = 0;
}
if (e.getSource() == knopf)
{
reset = false;
versuch++;
draw();
}
if (e.getSource() == bt_reset)
{
reset = true;
reset();
}
}
// Überwacht die Scrollbars auf Änderungen
public void adjustmentValueChanged(AdjustmentEvent e)
{ // für das Bewegen der Scrolls wichtig, damit sich die Werte verändern können
winkel = scrollwinkel.getValue();
v = scrollv.getValue();
masse1 = scrollmasse1.getValue();
r = scrollr.getValue();
update();
}
// Zeichnungsfunktion: Wird immer wieder aufgerufen
public void paint(Graphics g)
{
g.setColor(Color.black);
g.drawLine(0, ground, width, ground);
g.setColor(Color.gray);// Farben des Koordinatensystem
g.drawLine(0, ystart, width, ystart); // Koordinatenachsen zeichnen
g.drawLine(xstart, 0, xstart, height - 10);
int[] arx = {45, 45,40 , 45 , 50 ,45, 45};
int[] ary = {440,450, 450 , 455, 450,450, 440};
int[] arp = {(int)Math.round((x - xstart) * faktor + xstart),(int)Math.round((x - xstart) * faktor + xstart),(int)Math.round((x - xstart) * faktor + xstart)-5,(int)Math.round((x - xstart) * faktor + xstart)+5,(int)Math.round((x - xstart) * faktor + xstart),(int)Math.round((x - xstart) * faktor + xstart)};
int[] arm = {(int)Math.round((y - ystart) * faktor + ystart),(int)Math.round((y - ystart) * faktor + ystart)+10,(int)Math.round((y - ystart) * faktor + ystart)+10,(int)Math.round((y - ystart) * faktor + ystart)+15,(int)Math.round((y - ystart) * faktor + ystart)+10,(int)Math.round((y - ystart) * faktor + ystart)+10,(int)Math.round((y - ystart) * faktor + ystart)};
if (!reset)
{
if (farbe == 0)
{
g.setColor(Color.green);
farbe = 1;
} // Farbwechsel
else
{
g.setColor(Color.yellow);
farbe = 0;
}
g.drawPolyline(fluglinie.xpoints, fluglinie.ypoints, fluglinie.npoints);
g.fillOval((int) Math.round((xold - xstart) * faktor + xstart - (faktor / 4)), (int) Math.round((yold - ystart) * faktor + ystart - (faktor / 4)), r, r);
g.drawPolygon(arx,ary,7);
g.drawPolyline(arp,arm,(int)(masse*fallbeschl));
}
}
// reset - dazu brauchts keinen Kommentar;
public void reset()
{
abstand = 0;
update();
repaint();
lb_v.setText("Weite = ? Winkel = ?");
}
// update - aktualisiert die Daten
public void update()
{
daten.setText ( " Winkel: " + (int)winkel + "°" +
" v: " + (int)v + " m/s" +
" vx: " + Math.round( v * Math.cos(winkel/180*Math.PI)) + " m/s" +
" vy: " + Math.round( v * Math.sin(winkel/180*Math.PI)) + " m/s" +
" Masse: " + (int)masse1 + "kg" +
" Widerstandswert:" + (int)cw +
" Distanz: " + abstand + "m" + " " +
" Höhe: " + höhe + "m" +" " + "Durchmesser:" + r + "m");
}
}
Dieser Beitrag wurde von L-ectron-X am 13.10.2008 um 15:28 Uhr editiert.
Code-Tags gesetzt