MiCaDo Projektbericht - artecLab - Universität Bremen
MiCaDo Projektbericht - artecLab - Universität Bremen
MiCaDo Projektbericht - artecLab - Universität Bremen
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