01.02.2013 Aufrufe

MiCaDo Projektbericht - artecLab - Universität Bremen

MiCaDo Projektbericht - artecLab - Universität Bremen

MiCaDo Projektbericht - artecLab - Universität Bremen

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.

70<br />

Kollisionserkennung<br />

Auf dieser Grundlage überlegten wir uns zunächst, wie zwei Kreaturen eine herannahende Kollision<br />

überhaupt erkennen können. Ein Beispiel für eine nahende Kollision ist in Abbildung 8.1 zu sehen.<br />

Die Kreaturen A und B sind durch einen dicken schwarzen Punkt gekennzeichnet und bewegen<br />

sich jeweils auf einem Weg (rot gestrichelte Linie). Wie man erkennen kann, kreuzen sich ihre Wege.<br />

Die herannahende Kollision wird nun durch eine einfache Berechnung des Abstandes der beiden<br />

erkannt (siehe Abbildung 8.2). Der Abstand muss größer als die Summe aus dem Umfang der Kreatur<br />

A und B (in der Abbildung grün gestrichelt gekennzeichnet) und einem Toleranzfaktor, damit<br />

eine Kollision ” frühzeitig“ erkannt wird, sein. Ist der Abstand kleiner als die Summe, so wird noch<br />

überprüft, ob die Kreaturen sich relativ aufeinander zu bewegen. Ein Beispiel hierfür ist in der Abbildung<br />

8.3 dargestellt. Im ersten Berechnungsschritt würde hier eine Kollision erkannt werden, doch<br />

die Kreatur B entfernt sich von dem Weg der Kreatur A, so dass sie letztendlich nicht kollidieren<br />

werden. Berechnet wird dies durch eine Schnittpunktberechnung der beiden Linien, die sich jeweils<br />

von der Position einer Kreatur zu ihren Zielwegpunkt aufspannt (in Abbildung 8.3 spannt sich z.B.<br />

eine Linie von der Position der Kreatur A zum Wegpunkt b). Später beim Testen unser Implementierung<br />

stellten wir noch fest, dass es trotzdem zu einer Kollision kommen konnte, auch wenn sie sich<br />

nicht relativ aufeinander zu bewegen. Grund hierfür ist ein möglicher großer Geschwindigkeitsunterschied<br />

in der Fortbewegung der beiden Kreaturen. In der Abbildung 8.3 würde es z.B. zu einer<br />

Kollision kommen, wenn die Kreatur B sich nicht schnell genug fortbewegt. Es darf also letztendlich<br />

ein Minimalabstand 3 nicht unterschritten werden, sonst muss ein Ausweichvorgang eingeleitet werden.<br />

Diese Überprüfungen werden mit jedem Frame in der Aktion micado std walk durchgeführt.<br />

Berechnung des Ausweichweges<br />

Ist erstmal eine Kollision erkannt, stellt sich nun die Frage: Wie soll der neue Weg (Ausweichweg)<br />

einer Kreatur aussehen, um einer anderen, die dann stehen bleibt und wartet, auszuweichen? In<br />

unserem ersten Konzept beschlossen wir, dass die ausweichende Kreatur sich auf einer Kreisbahn<br />

oder auf einer sinusförmigen Kurve um die stehende Kreatur bewegen soll. In den Abbildungen 8.4<br />

und 8.5 wird die Berechnung eines kreisförmigen Ausweichweges als Beispiel dargestellt. Zunächst<br />

wird der Punkt auf dem Weg der Kreatur A gesucht, der am nahesten zur Kreatur B liegt. Dieser<br />

Punkt bildet nun den Mittelpunkt des Halbkreises auf dem die Kreatur später ausweichen soll.<br />

3 Der Minimalabstand ist die Summe aus den beiden Umfängen der Kreaturen und einem sehr kleinen Toleranzfaktor

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!