Würfelsimulator
Würfelsimulator
Würfelsimulator
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Programmablauf<br />
PDA-Programmieren • "<strong>Würfelsimulator</strong>" • SS10 • Simon Brennecke • Ivo Torp • Klaus Manneck<br />
Der Einstiegspunkt in die Physik, nachdem das Environment erzeugt und die Objekte hinzugefügt<br />
wurden, ist die Simulate() Methode. Diese wird von außen mit dem zu berechnenden Zeitintervall<br />
(dTime) aufgerufen und stößt den Prozess der Intervallhalbierung an.<br />
public void Simulate(float dTime)<br />
{<br />
CalculateAllAccelerations();<br />
Interval(dTime, 1);<br />
}<br />
private void Interval(float dTime, int Level)<br />
{<br />
MoveAll(dTime);<br />
switch (DetectAllCollisions())<br />
{<br />
case Collision.State.COLLIDING:<br />
HandleAllCollisions();<br />
break;<br />
case Collision.State.PENETRATING:<br />
if (Level > maxIntervals)<br />
{<br />
HandleAllCollisions();<br />
}<br />
else<br />
{<br />
Interval(-Math.Abs(dTime) / 2f, Level + 1);<br />
Interval(+Math.Abs(dTime) / 2f, Level + 1);<br />
}<br />
break;<br />
}<br />
}<br />
Die Intervallhalbierung dient dem Zweck, sich einer stattfindenden Kollision so genau wie möglich<br />
anzunähern, da auf einem Computersystem (insbesondere auf einem PDA) keine unbegrenzten<br />
Ressourcen und damit auch keine unbegrenzte Genauigkeit verfügbar sind.<br />
Der grobe Ablauf ist relativ simpel. Bevor das Intervall begonnen wird, werden zunächst für alle<br />
Objekte die aktuell wirkenden Beschleunigungen ausgerechnet. Dies ist erforderlich, da sich<br />
manche Kräfte, wie z.B. Reibung und Dämpfung, über die Zeit bzw. mit der Geschwindigkeit<br />
verändern können. Innerhalb eines Intervalls werden diese Kräfte als konstant angenommen, um<br />
einen unnötig hohen Rechenaufwand zu vermeiden.<br />
Als nächstes werden die Objekte mit den so berechneten Geschwindigkeiten um die angegebene<br />
Zeitspanne bewegt. Danach läuft die Kollisionserkennung durch, die uns sagen kann, ob sich zu<br />
diesem Zeitpunkt Objekte berühren oder überschneiden. Falls nicht, ist die Simulation ereignislos<br />
verlaufen und die Methode wird verlassen. Falls eine Durchdringung festgestellt wurde, greift<br />
allerdings die Halbierung: die Simulation wird rekursiv um die halbe Zeit zurückgedreht und noch<br />
einmal auf Kollisionen überprüft, usw. bis ein Kollisionspunkt innerhalb der Toleranzgrenzen<br />
gefunden wurde oder die maximale Anzahl an Iterationen überschritten wird. Sobald dies der Fall<br />
ist, werden alle aktuell bestehenden Kollisionen behandelt und aufgelöst, so dass alle halbierten<br />
Intervalle auf Basis der nun veränderten Objektbewegung weiter gerechnet werden können. Dieser<br />
Prozess wird fortgesetzt, bis die Behandlung am Ende des festgelegten Zeitintervalls angelangt<br />
Folgende Grafik stellt die Intervallschritte zur Findung einer Kollision anschaulich dar:<br />
Seite 19 / 37