Interationenen aus der Mechanik - Beispiele

Iterationen eignen sich hervorragend für Berechnungen von Bahnkurven. Ausgehend von der Position eines Körpers, seiner Anfangsgeschwindigkeit und seiner Position soll nach einem bestimmten Zeitschritt aus den Kräften, die auf ihn wirken, die Beschleunigung und daraus die Änderung der Geschwindigkeit und somit sein neuer Ort berechnet werden. Zeichnet man diese Orte ein, erhält man die Kurve, längs der sich der Körper bewegt...

Ein bisschen Physik ;-):

F = a.m (Bewegungsgleichung) - erlaubt die Berechnung der Beschleunigung a = F/m.

Aus der Beschleunigung a folgt die Geschwindigkeitsänderung a.dt und daraus die neue Geschwindigkeit v: v=v+a.dt (dt ... Zeitschritt)

Aus der Geschwindigkeit v folgt die Wegänderung v.dt und daraus die neue Position des Körpers s = s+v.dt.

Jetzt zeichnen wir die Position des Körpers ein und beginnen wieder von vorne (ITERATION) ...

Beispiele:

Inhalt "Programmieren mit Delphi"

Nussbaumers Seite

Wurfbahn

procedure TForm1.Button1Click(Sender: TObject);
   var x,y,vx,vy,ax,ay,dt:real;
   begin
     dt:=0.1;
     x:=0;
     y:=0;
     vx:=StrToFloat(edit1.text);
     vy:=StrToFloat(edit2.text);
     ax:=0;
     ay:=9.81;
     Image1.Canvas.MoveTo(round(x),round(y));
     repeat
       vx:=vx+ax*dt;
       vy:=vy+ay*dt;
       x:=x+vx*dt;
       y:=y+vy*dt;
       Image1.Canvas.LineTo(round(x),round(y));
     until (x>300) or (y>300);
end;

Ändere das Programmlisting so ab, dass auch schräge Würfe (nach oben) dargestellt werden können!

Zu der Liste von Beispielen zurück

Satellitenbahn

procedure TForm1.Button1Click(Sender: TObject);

var GM,r,r3,x,y,vx,vy,ax,ay,dt,alpha,er,x0,y0:real;
    zaehler,i:integer;
    px,py:integer;

begin
     zaehler:=120;
     GM:=398000000000000.0;
     er:=6370000;
     alpha:=0;
     vx:=0;
     vy:=5500;
     dt:=500;
     x0:=3*er;
     y0:=0;
     x:=x0;
     y:=y0;

     paintbox1.canvas.brush.color:=clWhite;
     paintbox1.canvas.pen.color:=clRed;
     paintbox1.canvas.rectangle(0,0,400,400);
     paintbox1.canvas.Moveto(200+round(x0/(20*er)*400),200);
     paintbox1.canvas.Ellipse(200-round(er/(20*er)*400),200-round(er/(20*er)*400),
                              200+round(er/(20*er)*400),200+round(er/(20*er)*400));


     for i:= 1 to zaehler do begin
       r3:=sqrt(x*x+y*y);
       r:=r3*r3*r3;
       ax:=-GM*x/r;
       ay:=-GM*y/r;
       vx:=vx+ax*dt;
       vy:=vy+ay*dt;
       x:=x+vx*dt;
       y:=y+vy*dt;

       {paintbox1.canvas.Lineto(200+round(x/(20*er)*400),
                               200+round(y/(20*er)*400));
       }
       paintbox1.canvas.Pixels[200+round(x/(20*er)*400),
                               200+round(y/(20*er)*400)]:=clBlue;
     end;

end;

Ergänze im Programm eine Eingabe für Starthöhe, Abschusswinkel, Anfangsgeschwindigkeit und Zeitschritt und ermittle einen korrekten Darstellungsfaktor, mit dem die Bahnkurve in das 400x400 Pixel große Quadrat eingetragen werden kann!

Zu der Liste von Beispielen zurück