02.11.2013 Aufrufe

Würfelsimulator

Würfelsimulator

Würfelsimulator

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!