Registriert seit: 1. Dez 2003
360 Beiträge
Turbo Delphi für Win32
|
Re: Fahrzeug Simulation: Physik, Canvas & Co
18. Sep 2006, 21:13
Also ich würde es ungefähr so machen: ...und zwar zuerst mal von einem anfangs wohl immer richtungsunabhängigem V ausgehen, welches nämlich ganz alleine bloß davon abhängig ist, ob man Gas gibt oder bremst (oder nichts von beidem tut).
v = v + dv;
Danach wäre die Richtung interessant, in der sich das Fahrzeug bewegt:
Richtung = Richtung + dRichtung;
bzw.
Richtung = Richtung + Winkelgeschwindigkeit (z.B. in Grad/0.1sec);
...möglichst also in Grad, wobei 0Grad=Norden, 90Grad=Westen, 180Grad=Süden u. 270Grad=Osten wäre.
Und erst mit diesen beiden Größen kannst Du ja dann auch die Geschwindigkeit in ihre jeweils beiden Richtungskomponenten (vx u. vy) zerlegen, event. etwa so:
vx = vx + round (cos(2*Pi/360 * (Richtung+90)) * dV); // o.ä.
vy = vy + round (sin(2*Pi/360 * (Richtung+90)) * dv); // o.ä.
...um danach schließlich auch diese vier zentralen Zeilen deines Codes
dx := vx * dt;
dy := vy * dt;
x := x + dx;
y := y + dy;
auch durchaus so benutzen zu können ...und womit auch eine jeweilige Ortsveränderung so eigentlich schon fertig ermittelt wäre und dann nur noch mehr in deine Canvas-Grafik reingemalt werden müsste.
Zur event. genauen Bestimmung eines jeweiligen dv´s oder einer jeweiligen Winkelgeschwindigkeit kannst Du ja dann entsprechende Codezeilen noch vor der Verwendung dieser Größen ausführen ...und dabei dann wiederum Parameter mit einfließen lassen, die dann dafür wieder maßgeblich sind (also eine negative oder positive Beschleunigung (a) für dv bzw. einen Lenkradeinschlag plus der aktuellen Geschwindigkeit für die Winkelgeschwindigkeit)...
edit: ...und Norden sollte dann natürlich auch oben auf deinem Screen sein, wie bei allen Landkarten üblich.
...außerdem ist es natürlich auch minimaler Unsinn, ein jedes neues vx u. vy immer aus einem jeweils vorherigen vx u. vy aufzubauen. Besser: vx u. vy errechnet sich immer wieder völlig neu, und zwar nur aus der aktuellen normalen Geschwindigkeit und deren momentaner Richtung:
vx := round (v * cos(2*Pi/360 * (FFahrtrichtung+90)));
vy := round (v * sin(2*Pi/360 * (FFahrtrichtung+90)));
MfG (& Thx ggf.)
|