Thread Berechnen der Flugbahn an Extremstellen: Problem bei (grafischen) Simulationen
(11 answers)
Opened by Thorium at 2006-02-09 15:29
Moin an alle
Ich experimentiere im Moment mit C und SDL. Dabei bin ich auf ein Problem gestossen, das wohl eher logisch-rechnerischer Art ist. Bei der Simulation von sich beeinflussenden Massen (z.B. Planeten, Satelliten) kommt es immer wieder vor, dass eine Masse plötzlich unglaublich Beschleinigt wird, wenn sie auf eine andere "stösst" (b.z.w ohne Kollisionsroutine durch sie "hindurchfliegt"). Das rührt daher, dass ich die Kräfte, welche auf die Massen wirken mit Vektoren berechne. Aus den Vektoren ergeben sich dann die neuen Geschwindigkeiten der Massen für den nächsten Frame. Ist dieser gezeichnet, werden die neuen Positionen analysiert und wiederum die verschiedenen Kräfte berechnet. Das Problem ist nun folgendes: Die Gravitationskraft berechnet sich aus F_g = M_1 * M_2 / r^2. Befindet sich nun eine Masse extrem nah an einer anderen (r ist also sehr klein) wird die Kraft die auf die Massen wirken dementsprechend hoch. Demnach wird auch die Geschwindigkeit für diesen Frame für die Massen dementsprechend hoch. Da die Geschwindigkeit aber so hoch ist, sind die Massen beim nächsten Frame so weit voneinander entfernt, dass die neu wirkende Kraft in keinem Verhältnis zur herrschenden Geschwindigkeit steht. Die Masse wird einfach von der Bildfläche katapultiert. Die Positionen werden also Schrittweise berechnet, Bild für Bild, Frame für Frame. "Hüpft" nun eine Masse nah an eine Andere ist die Geschwindigkeit so hoch, dass sie mit dem nächsten Frame praktisch aus dem Wirkungsberech der anderen Masse herauspringt und somit die eigentliche Abbremsung nie erfahren wird. Wenn ich nun also zwei gleich schwere Massen mit einem Abstand von 200 Pixeln definiere, "fallen" sie aufeinander zu, wegen der Fehlenden Kollisionsroutine, fallen sie durcheinander, und werden dann so sehr beschleunigt, dass sie einen Abstand weit über 200 Pixeln haben, wenn sie zum Stillstand kommen. Die selbe Art von Problem habe ich, wenn ich ein Pong programmiere. Die Kugel hat dann z.B. eine Geschwindigkeit von 10 Pixeln pro Frame. Wenn die Kugel nun an den Rand des Fensters kommt, und gerade bei Pixel 2 ist, ist sie beim nächsten Frame bei Pixel -8 und wird erst dann umgelenkt. Es geht also im Prinzip darum, wie ich die Kräfte bz.w. die Zustände zwischen zwei Frames korrekt rechne. Ich habe einwenig nachgedacht und mir ist keine Gescheite Lösung für dieses wohl allgemeine Problem eingefallen... Irgendwelche Ideen? Per|li|nist der; -en, -en <zu â...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
|