Kreis der sich bewegt

Status
Nicht offen für weitere Antworten.
L

Lucci

Gast
Moin

Ich hab nen Kreis gemalt der ne Kurve beschreibt , das Problem aber ist das sich die Zeichnung immer wiederholt d.h. es sieht wie ein fetter Strich aus weil ja soviele Kreise gemalt worden sind. Ich will aber nur, dass der Kreis sich bewegt.
Also das hört sich ein bisschen verwirrend an, ich versuchs mal anders. Man stelle sich einen Fussball vor der ne Kurve fliegt(also 2 dimensional) und dabei macht man von jedem Punkt den der Fussball in der Luft passiert ein Bild und stellt alle Bilder als eines dar. Man sieht dann nur noch einen fetten Strich und man erkennt keinen Fussball mehr und mein Ziel wäre es den fliegenden Fussball darzustellen.

Hätte da jemand eine Idee wie man so einen fliegenden Kreis etwa darstellen könnte?
mfg Lucci
 
L

Lucci

Gast
oh sorry hab vergessen die Sachen aufzuschreiben:
also das wäre mein ganzes Programm, und das Problem liegt bei g.drawOval bei public void draw(Graphics g) .. hoffe, dass hilft:D

Code:
/* Matura21.java */

import java.awt.event.*;
import java.applet.*;
import java.awt.*;
import java.util.Random;

public class Matura21
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 = 800;
  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;


  double beta1 = 0.030114;    //Widerstandswert  
  double beta = 0;

  double masse1 = 1;  //Masse des Fussballs
  double masse = 0;
  

  int maxabstand = 0;		//Ausrechnen der Maxweite
  int maxwinkel = 0;
  
  
  

//Globale Variablen für grafische Elemente                                   

    Graphics g;   // Klasse für das Grafische

     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_cw = new Label("CW-Wert");

     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 scrollcw = new Scrollbar(Scrollbar.HORIZONTAL,(int)cw,20,0,30);

     Checkbox widerstand = new Checkbox("Luftwiderstand",true); //Widerstand , eine Box in der man einen Haken hinterlässt und die so aktiviert wird
     CheckboxGroup body = new CheckboxGroup();

//Eigentliche Parabelfunktion                                   

public void draw(Graphics g){

	double fx, fy;
	double fallbeschl = 9.81;   //Fallbeschleunigung
	double  xold, yold;
	double x, y, vx, vy, ax, ay;
	double beta1, va ;
    
	va = v;
	beta1 = beta1 = ((masse1*cw)/2)*Math.pow(v,2);
	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 farbe = 0;

	do{          //der Befehl do{}  lässt die Parabel erscheinen , aber ohne Knopfdruck läuft nix ... siehe weiter unten!
		beta1 = ((masse1*cw)/2)*Math.pow(v,2);
		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)-masse1*fallbeschl;  //neue Kraft in y-Richtung
		ax = fx/masse1;                                      //neue x-Beschl.
		ay = fy/masse1;                                      //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);
		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),
        	           (int) Math.round((yold - ystart)*faktor + ystart),
         	           (int) Math.round((x - xstart)*faktor + xstart),
         	           (int) Math.round((y - ystart)*faktor + ystart));
		g.drawOval((int)Math.round((xold - xstart)*faktor + xstart),
		           (int)Math.round((yold - ystart)*faktor +ystart),10,10);

		try{
			Thread pause = new Thread();
			pause.sleep(zz);
		}catch(InterruptedException e) {}
    
	}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]");
    
	
		
	}

	
       	
	
  
	

    }
	
//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,700, 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_cw.setBounds(500,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);
	  scrollcw.setBounds(370,ground +70,120,20);

      widerstand.setBounds(570,ground + 70,120,20);

      
      g = getGraphics();

      add(daten);
      add(scrollwinkel);
      add(scrollv);	  //zeichne Elemente
      add(scrollmasse1);
	  add(scrollcw);
	  add(knopf);
      add(bt_reset);
      add(widerstand);
      add(lb_winkel);
	  add(lb_v);
	  add(lb_masse);
	  add(lb_cw);
	  

      knopf.addActionListener(this);            // zu überwachende Elemente
      bt_reset.addActionListener(this);  

      scrollwinkel.addAdjustmentListener(this);
	  scrollv.addAdjustmentListener(this);
	  scrollmasse1.addAdjustmentListener(this);
	  scrollcw.addAdjustmentListener(this);
	  
	  
	  
	  
      

      update();

  }
  
//Überwacht die Buttons auf Clicks                                       


  public void actionPerformed( ActionEvent e){



          
      
      
    if (widerstand.getState()){    // Widerstand ausschalten, wenn gewünscht
       beta = beta1;} else if(!widerstand.getState()){
	   beta = 0;
	   }

     if(e.getSource()==knopf){
      versuch++;
      draw(g);
     }

     if(e.getSource()==bt_reset){
      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();
	  cw = scrollcw.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); 

    
	
	
}


//reset  -  dazu brauchts keinen Kommentar;                             
        
        public void reset()
        {
                abstand = 0;
		update();
		g.clearRect(0,0,width,height);
		paint(g);
		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" +
					  "        CW-Wert:" + (int)cw +
                      "        Distanz: " + abstand  + "m" + "      " +
					  " Höhe: " + höhe + "m" );
      }
      


  
	    }
 

0x7F800000

Top Contributor
das sieht alles recht gruselig aus, aber dein problem kann man sicherlich beheben, wenn man direkt vor's drawOval() zusätzlich fillRect() einfügt, das ein rechteck in hintergrundfarbe über den gesamten sichtbaren bereich malt...
 
G

Guest

Gast
du meinst ich sollte einfach das selbe machen ( ein bisschen langsamer) und dann würde es denn gleichen Effekt erzielen wie ob es sich bewegen würde?:S bin kritisch ob das reibungslos klappt. Hab gedacht, dass es irgendeine Methode gibt die mir helfen könnte, leider hab ich nichts gutes im Buch bzw. im Netz gefunden
 

0x7F800000

Top Contributor
hö? hab ich irgendwo irgendwas von langsamer erwähnt? Bevor du etwas neues zeichnest, musst du einfach den gesamten Hintergrund saubermachen, sonst bleibt der ganze müll von bisherigen animationsschritten einfach da hängen, und du kriegst die wurscht statt einem kreis... So einfach ist das.

Und noch was: könntest du die länglichen kommentare jeweils in die vorherige zeile schieben, die darstellung vom code ist hier leider ein wenig suboptimal, weil alles drumherum auch gestreckt wird, jetzt kann man hier überall nix mehr lesen ;)

edit: ach ne, egal, kannst ja nichts editieren, egal, sorry
 

Marco13

Top Contributor
Noch eine Faustregel: Man sollte als Anfänger NIE auf einer Component "getGraphics" aufrufen.

Das ist auch EINE Ursache für das Problem. Eigentlich sollte NUR von der paint-Methode aus gezeichnet werden (und zwar in das "Graphics" das man dort immer "frisch" übergeben bekommt).

NUR von der paint-Methode aus.
NUR von der paint-Methode aus.
NUR von der paint-Methode aus.

(Ja.)

Und WAS dort gezeichnet werden sollte, ist der aktuelle Zustand. Und damit das alles Funktioniert, muss der aktuelle Zustand in einem eigenen Thread verändert werden. D.h. du musst das, was im Moment in der "draw"-Methode verändert (und direkt gezeichnet) wird, zwischenspeichern, und ein "repaint" aufrufen, damit der aktuelle Zustand gezeichnet werden kann.

Hab's mal Quick & Dirty (!!!) zurechtgehackt - das aufzuräumen ist (so oder so :wink: ) dein Job...
Code:
/* Matura21.java */

import java.awt.event.*;
import java.applet.*;
import java.awt.*;
import java.util.Random;

public class Matura21
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 = 800;
  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;

   double fx, fy;
   double fallbeschl = 9.81;   //Fallbeschleunigung
   double  xold, yold;
   double x, y, vx, vy, ax, ay;
   double va ;

  double beta1 = 0.030114;    //Widerstandswert
  double beta = 0;

  double masse1 = 1;  //Masse des Fussballs
  double masse = 0;


  int maxabstand = 0;      //Ausrechnen der Maxweite
  int maxwinkel = 0;




//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_cw = new Label("CW-Wert");

     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 scrollcw = new Scrollbar(Scrollbar.HORIZONTAL,(int)cw,20,0,30);

     Checkbox widerstand = new Checkbox("Luftwiderstand",true); //Widerstand , eine Box in der man einen Haken hinterlässt und die so aktiviert wird
     CheckboxGroup body = new CheckboxGroup();

//Eigentliche Parabelfunktion

public void draw(){


   va = v;
   beta1 = beta1 = ((masse1*cw)/2)*Math.pow(v,2);
   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 farbe = 0;

   do{          //der Befehl do{}  lässt die Parabel erscheinen , aber ohne Knopfdruck läuft nix ... siehe weiter unten!
      beta1 = ((masse1*cw)/2)*Math.pow(v,2);
      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)-masse1*fallbeschl;  //neue Kraft in y-Richtung
      ax = fx/masse1;                                      //neue x-Beschl.
      ay = fy/masse1;                                      //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);
      repaint();
      try{
         Thread.sleep(zz);
      }catch(InterruptedException e) {}

   }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]");



   }







    }

//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,700, 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_cw.setBounds(500,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);
     scrollcw.setBounds(370,ground +70,120,20);

      widerstand.setBounds(570,ground + 70,120,20);


      add(daten);
      add(scrollwinkel);
      add(scrollv);     //zeichne Elemente
      add(scrollmasse1);
     add(scrollcw);
     add(knopf);
      add(bt_reset);
      add(widerstand);
      add(lb_winkel);
     add(lb_v);
     add(lb_masse);
     add(lb_cw);


      knopf.addActionListener(this);            // zu überwachende Elemente
      bt_reset.addActionListener(this);

      scrollwinkel.addAdjustmentListener(this);
     scrollv.addAdjustmentListener(this);
     scrollmasse1.addAdjustmentListener(this);
     scrollcw.addAdjustmentListener(this);






      update();

  }

//Überwacht die Buttons auf Clicks


  public void actionPerformed( ActionEvent e){






    if (widerstand.getState()){    // Widerstand ausschalten, wenn gewünscht
       beta = beta1;} else if(!widerstand.getState()){
      beta = 0;
      }

     if(e.getSource()==knopf){

         Thread t = new Thread(new Runnable()
         {
             public void run()
             {
                 draw();
             }
         });
         t.start();


      versuch++;
     }

     if(e.getSource()==bt_reset){
      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();
     cw = scrollcw.getValue();
      update();

     }



//Zeichnungsfunktion: Wird immer wieder aufgerufen

  public void paint(Graphics g){
    g.setColor(Color.CYAN);
    g.fillRect(0,0,getWidth(), getHeight());
    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);


      //if (farbe==0){ g.setColor(Color.green); farbe = 1;}        //Farbwechsel
      //else{        g.setColor(Color.yellow); farbe = 0;}
      g.setColor(Color.RED);

      g.drawLine((int) Math.round((xold - xstart)*faktor + xstart),
                      (int) Math.round((yold - ystart)*faktor + ystart),
                       (int) Math.round((x - xstart)*faktor + xstart),
                       (int) Math.round((y - ystart)*faktor + ystart));
      g.drawOval((int)Math.round((xold - xstart)*faktor + xstart),
                 (int)Math.round((yold - ystart)*faktor +ystart),10,10);


}


//reset  -  dazu brauchts keinen Kommentar;

        public void reset()
        {
                abstand = 0;
      update();
      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" +
                 "        CW-Wert:" + (int)cw +
                      "        Distanz: " + abstand  + "m" + "      " +
                 " Höhe: " + höhe + "m" );
      }




       }




Code:
//reset  -  dazu brauchts keinen Kommentar;
:toll: :lol:
 
L

Lucci

Gast
menno jetzt hab ich keine Linie mehr:p .. und öhm wieso flackerts so?
 

Ariol

Top Contributor
Hab's dir mal ein bisschen sauberer geschrieben.

Code:
/* Matura21.java */

import java.awt.event.*;
import java.applet.*;
import java.awt.*;
import java.util.Random;

public class Matura21 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			= 800;
	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;

	double			beta1			= 0.030114;														// Widerstandswert
	double			beta			= 0;

	double			masse1			= 1;																// Masse des Fussballs
	double			masse			= 0;

	int				maxabstand		= 0;																// Ausrechnen der Maxweite
	int				maxwinkel		= 0;

	// 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_cw			= new Label("CW-Wert");

	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		scrollcw		= new Scrollbar(Scrollbar.HORIZONTAL, (int) cw, 20, 0, 30);

	Checkbox		widerstand		= new Checkbox("Luftwiderstand", true);							// Widerstand , eine Box in der man einen Haken hinterlässt und die so aktiviert wird
	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
	Thread			calcThread;
	boolean			reset;

	// Eigentliche Parabelfunktion
	public void draw()
	{

		calcThread = new Thread()
		{
			@Override
			public void run()
			{
				va = v;
				beta1 = ((masse1 * cw) / 2) * Math.pow(v, 2);
				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;

				fluglinie = new Polygon(); // Fluglinie zurüecksetzen

				do
				{ // der Befehl do{} lässt die Parabel erscheinen , aber ohne Knopfdruck läuft nix ... siehe weiter unten!
					beta1 = ((masse1 * cw) / 2) * Math.pow(v, 2);
					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) - masse1 * fallbeschl; // neue Kraft in y-Richtung
					ax = fx / masse1; // neue x-Beschl.
					ay = fy / masse1; // 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));

					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, 700, 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_cw.setBounds(500, 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);
		scrollcw.setBounds(370, ground + 70, 120, 20);

		widerstand.setBounds(570, ground + 70, 120, 20);

		add(daten);
		add(scrollwinkel);
		add(scrollv); // zeichne Elemente
		add(scrollmasse1);
		add(scrollcw);
		add(knopf);
		add(bt_reset);
		add(widerstand);
		add(lb_winkel);
		add(lb_v);
		add(lb_masse);
		add(lb_cw);

		knopf.addActionListener(this); // zu überwachende Elemente
		bt_reset.addActionListener(this);

		scrollwinkel.addAdjustmentListener(this);
		scrollv.addAdjustmentListener(this);
		scrollmasse1.addAdjustmentListener(this);
		scrollcw.addAdjustmentListener(this);

		update();

	}

	// Überwacht die Buttons auf Clicks

	public void actionPerformed(ActionEvent e)
	{

		if (widerstand.getState())
		{ // Widerstand ausschalten, wenn gewünscht
			beta = beta1;
		}
		else 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();
		cw = scrollcw.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);

		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)), 10, 10);
		}
	}

	// 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"
				+ "        CW-Wert:" + (int) cw + "        Distanz: " + abstand + "m" + "      " + " Höhe: " + höhe + "m");
	}

}
 
L

Lucci

Gast
Danke viel mals für eure Hilfe und eure Mühe .. hätte nicht gedacht, dass ich gerade das ganze Programm geschrieben bekomme:D Nochmals Vielen Dank
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
YAZZ BlueJ Bewegung einer Figur im Kreis Java Basics - Anfänger-Themen 4
J Kreis soll die gleiche Fläche wie das Rechteck haben wie mache ich das? Java Basics - Anfänger-Themen 3
N Kreismuster auf Bestehendem Kreis erstellen Java Basics - Anfänger-Themen 10
E Kreis soll eine Raupe darstellen Java Basics - Anfänger-Themen 37
C Kleinsten Kreis einer Punktmenge bestimmen Java Basics - Anfänger-Themen 4
CptK Interface Kleine Kreise in großem Kreis anordnen Java Basics - Anfänger-Themen 3
Y Kreis auf einer Kreisbahn bewegen Java Basics - Anfänger-Themen 5
P Erste Schritte Kreis animieren Java Basics - Anfänger-Themen 2
A Kreisumfang/-Fläche vom Kreis berechnen Java Basics - Anfänger-Themen 39
H Kreis verschieben Java Basics - Anfänger-Themen 10
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
X Kreis/Linie Programmieren Java Basics - Anfänger-Themen 1
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
L Dreieck Kreis Java Basics - Anfänger-Themen 12
A Kreis,Radius Programm Java Basics - Anfänger-Themen 3
N Per Button Kreis zeichnen Java Basics - Anfänger-Themen 8
C Kreis nach Mausklick zeichnen Java Basics - Anfänger-Themen 5
A wie Kreis mit Schleife versetzten? Java Basics - Anfänger-Themen 25
O Punkte auf einem Kreis "wandern" lassen Java Basics - Anfänger-Themen 3
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
D Kreis mit Pfeiltaste bewegen Java Basics - Anfänger-Themen 3
K Bild auf Kreis packen Java Basics - Anfänger-Themen 2
E Kreis erstellen Java Basics - Anfänger-Themen 10
B Einen Kreis erzeugen Java Basics - Anfänger-Themen 3
S Erzeuge einen Kreis Java Basics - Anfänger-Themen 16
B Kreis,Punkt,Zylinder Java Basics - Anfänger-Themen 6
D Punktberechnung im Kreis Java Basics - Anfänger-Themen 15
TheKing Bild nur in Kreis sichtbar machen Java Basics - Anfänger-Themen 6
K Kreis mit neuer Position zeichnen Java Basics - Anfänger-Themen 3
M Umfang von Rechteck oder Kreis anhand der Parameter Java Basics - Anfänger-Themen 2
L Klickbarer Bereich in einem Kreis Java Basics - Anfänger-Themen 13
D kreis gelb gefüllt aber schwarzer rand. Java Basics - Anfänger-Themen 2
K Kreis Zeichnen ? Code Richtig aber keine Zeichung Java Basics - Anfänger-Themen 8
G Kreis auf JComponent zeichnen Java Basics - Anfänger-Themen 8
0 Klasse Kreis Java Basics - Anfänger-Themen 4
P Java-Applet, Kreis zeichnen Java Basics - Anfänger-Themen 4
E Kreis in Frame ,den man mit der Maus versetzen kann? Java Basics - Anfänger-Themen 2
7 Kreis zeichnen Java Basics - Anfänger-Themen 4
J Kreis herumfliegen & abprallen von Rändern Java Basics - Anfänger-Themen 7
G contains - Punkt in Kreis enthalten? Java Basics - Anfänger-Themen 6
A Kreis mit gedrückter Maustaste bewegen. Java Basics - Anfänger-Themen 2
S Thread - Kugel im Kreis hin-und herflitzen lassen Java Basics - Anfänger-Themen 3
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
J Mein Java Programm lässt sich nicht mehr bearbeiten Java Basics - Anfänger-Themen 2
A Konsolenausgabe verschiebt sich Java Basics - Anfänger-Themen 8
M Wie lassen sich Konstanten in Bedingung stellen? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
B Programm beendet sich nicht und weiteres seltsames Verhalten Java Basics - Anfänger-Themen 9
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
H 36 Zufallszahlen die sich nicht wiederholen Java Basics - Anfänger-Themen 27
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
IamArctic Quaxli Tutorial, Rotorblätter bewegen sich nicht mehr Java Basics - Anfänger-Themen 4
M Java GUI label ändert sich erst zum Schluss Java Basics - Anfänger-Themen 4
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
X Kurzes Java-Programm, das sich komisch verhält Java Basics - Anfänger-Themen 6
J CMD schließt sich automatisch Java Basics - Anfänger-Themen 5
S Was für Aufgaben könnten sich hier hinter verbergen? Java Basics - Anfänger-Themen 5
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
F boolean stellt sich auf true Java Basics - Anfänger-Themen 15
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
H Punkt bewegt sich auf einer Ellipse Java Basics - Anfänger-Themen 6
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
Franzi1001 ScrollBar lässt sich nicht bewegen Java Basics - Anfänger-Themen 4
W Client verbindet sich nicht Java Basics - Anfänger-Themen 14
J Mein Programm beendet sich ohne mein Zutun Java Basics - Anfänger-Themen 9
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
K Zufalsszahl soll sich nicht wiederholen Java Basics - Anfänger-Themen 9
C Classpath Compiler lässt sich nur bedingt von Kommandozeile aus starten Java Basics - Anfänger-Themen 17
CptK Datentypen Objekt lässt sich nicht zu arraylist hinzufügen Java Basics - Anfänger-Themen 2
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
CptK Interface JLabel bewegt sich nicht sondern teleportiert sich... Java Basics - Anfänger-Themen 3
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
L Programm lässt sich nicht starten! Java Basics - Anfänger-Themen 1
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Hanschyo Programm schließt sich einfach Java Basics - Anfänger-Themen 2
L Panel verkleinert sich unerklärlicherweise Java Basics - Anfänger-Themen 7
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
x-tshainge Mein Programm lässt sich nicht Starten Java Basics - Anfänger-Themen 8
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
K Sysout wiederholt sich Java Basics - Anfänger-Themen 6
H Wieso öffnet sich der Texteditor? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben