Hüpfender Ball

Dies ist unser hüpfender Ball auf der Erde:

Physikalische Erklärung:


Wenn ein elastischer Ball auf den Erdboden mit einer gewissen
Geschwindigkeit trifft, wird er mit einer geringeren Geschwindigkeit
wiedervom Erdboden zurückgeworfen und durch die Fallbeschleunigung der
Erde(9.81m/s²) wird der Ball wiederum zurück auf den Erdboden befördert.
Somit nimmt die Sprunghöhe des Balles mit zunehmender Häufigkeit der
Berührungen mit dem Erdboden ab, weil der Impuls des Balles abnimmt.
Die Fallbeschleunigung ist nicht bei allen Planeten gleich und
somit hat der Ball auf diversen Planeten verschieden hohe Sprunghöhen.
Zum Beispiel hat der Planet Venus mit 8.6m/s² eine annähernd hohe
Fallbeschleunigung wie die der Erde. Im Vergleich dazu hat der Mars mit
3.69m/s² eine sehr geringe Fallbeschleunigung. Eine sehr niedrige
Fallbeschleunigung hat der Mond mit 1.635m/s².
 
Es werden folgende Variablen benötigt:

int breit=1100;             //Fensterbreite
  int hoch=800;             //Fensterhöhe
  int boden=500;            //y-Koordinate des Bodens
  double x;                 //x-Koordinatenwert
  double y;                 //y-Koordinatenwert
  double vx;                //Horizontalgeschwindigkeit
  double vy;                //Vertikalgeschwindigkeit
  double g;                 //Erdbeschleunigung
  double dt;                //Schrittweite
  double t;
  double k;                 //Dämpfungsfaktor
  double dvx;
  double dvy;
  boolean neu=true;
  boolean ende=false;
  boolean pause=false;
  Thread th;


Folgenden Threat benötigten wir zum Programmierung:

   addKeyListener(this);
    try{Thread.sleep(2000);}            //Verzögerung des Threads
    catch (InterruptedException e){}
     th=new Thread(this);
     th.start();                        //Threat wird gestartet

Mit diesen Ereignisprozeduren kann man das Programm zum
kurzzeitigen Anhalten oder zum schließen bewegen:

public void keyPressed (KeyEvent e) {     //Ereignissteuerung über die Tastatur
     if (e.getKeyCode () == KeyEvent.VK_SPACE) {pause=!pause;}   //Pause
     if (e.getKeyCode () == KeyEvent.VK_ESCAPE) {System.exit(0);} //Escape

Durch diese Ereignisprozeduren werden die Landschaft und der hüpfende Ball
gezeichnet:

public void update (Graphics g) {paint(g);}

  public void paint (Graphics g){                //Darstellung der Grafik
  if (neu){
        g.setColor(Color.green.darker());
        g.fillRect(0,0,breit,hoch);              //Darstellung des Bodens
        g.setColor(Color.blue.darker());
        g.fillRect(0,0,breit,boden);             //Darstellung des Himmels
        neu=false;

 }
   else{
   g.setColor(Color.red.darker());
   g.fillOval((int)x,(int)(boden-y),4,4);    //Hüpfender Ball wird dargestellt
   }
  }


 Diese folgenden verschiedenen Fällen haben wir erarbeitet:

Hüpfender Ball auf der Erde
public void run(){
      if (fall==1)
        vx=30;
        vy=60;
        g=9.81;
        dt=0.1;
        t=0;
        k=0.8;
      }
   
Hüpfender Ball auf dem Mond
      if (fall==2) {
        vx=30;
        vy=60;
        g=1.635;
        dt=0.1;
        t=0;
        k=0.8;
      }
      
Hüpfender Ball auf dem Mars

      if (fall==3) {
        vx=30;
        vy=60;
        g=3.69;
        dt=0.1;
        t=0;
        k=0.8;
      }
      
Hüpfender Ball auf der Venus
      if (fall==4) {
        vx=30;
        vy=60;
        g=8.60;
        dt=0.1;
        t=0;
        k=0.8;
      }
      
Anschließend haben wir eine Schleife zur Darstellung
des hüpfenden Balles folgend gemacht:

 double dx,dy;
    while (!ende)
      if (!pause)

So berechnet man die neuen Koordinaten der Schrittweite,der
Anfangsgeschwindigkeit,des neuen x-Wertes, der Anfangsgeschwindigkeit und des neuen
y-Wertes:

 t=t+dt;
        dvy=-g*dt;
        if (vy<0 & y<0) vy=-k*vy; else vy=vy+dvy;
        dx=vx*dt;
        x=x+dx;
        dy=vy*dt;
        repaint();
        if (x>breit)
         ende=true;



Listening