Weg finden mit Hilfe von Kreisberechnung
Verfasst: 03.08.2009 23:28
Ich bin auf ein kleines Problem mathematischer Natur gestoßen. Ich habe einen Menschen der einen Weg um ein Gewässer, zum Beispiel einen See finden muss.
Hierzu habe ich folgende Überlegung gehabt. Die Wegstrecke teile ich in gleich große Abschnitte. Die Abschnitte werden zunächst in Richtung zum Ziel hin geprüft. Befindet sich kein Gewässer im Weg dann soll der Weg in Richtung Ziel führen. Befindet sich aber Wasser im Weg wird von dem Vektor aus, der zum Ziel führt, in gleichmäßig Kreisförmig angeordneten Schritten in eine Richtung geprüft.
Zum Beispiel: Wenn wir zunächst 20 Meter gerade aus gehen und merken es kommt ein See. Dann drehen wir uns um 12° nach rechts und sehen, dass da ist immer noch Wasser im Weg ist. Dann drehen wir uns um weitere 12° nach rechts, also insgesamt 24°, und da ist kein Wasser im Weg. Die nächsten 20 Meter gehen wir also in diese Richtung. Dann wird erneut in Richtung Ziel geprüft...
Generell ist diese Art der Prüfung kein Problem. Ich benutze um den Kreis zu berechnen, in dessen Richtung die Strecke Abschnittsweise geprüft werden soll die Formel aus dem Beispielcode von PB in "Math". Um das ganze nicht durchgehend im Kreis zu prüfen habe ich es in 20 Abschnitte unterteilt.
Diese Art der Berechnung geht aber von 0° bis 360°. Um den Weg zu finden muss aber bei dem Vektor der das Ziel mit der Position verbindet angefangen werden. Also habe ich mir überlegt einen Zusatzwinkel zu berechnen, der Zwischen dem Zielvektor und dem ersten Prüfungsvektor ist. Dieser Zusatzwinkel wird dann einfach zu Sinus und Cosinus hinzugefügt.
Jetzt kommen wir zum eigentlichen Problem: Wenn das Ziel des Menschen weiter als 180° von der ersten Prüfung entfernt ist wird das Ergebnis verfälscht, da ich nur eine Formel besitze die den Inneren Winkel zwischen zwei Vektoren ausrechnet besitze.
Ich bin sehr schlecht im erklären, hoffe aber das Problem einigen etwas näher gebracht zu haben und bitte euch um Hilfe.
Hierzu habe ich folgende Überlegung gehabt. Die Wegstrecke teile ich in gleich große Abschnitte. Die Abschnitte werden zunächst in Richtung zum Ziel hin geprüft. Befindet sich kein Gewässer im Weg dann soll der Weg in Richtung Ziel führen. Befindet sich aber Wasser im Weg wird von dem Vektor aus, der zum Ziel führt, in gleichmäßig Kreisförmig angeordneten Schritten in eine Richtung geprüft.
Zum Beispiel: Wenn wir zunächst 20 Meter gerade aus gehen und merken es kommt ein See. Dann drehen wir uns um 12° nach rechts und sehen, dass da ist immer noch Wasser im Weg ist. Dann drehen wir uns um weitere 12° nach rechts, also insgesamt 24°, und da ist kein Wasser im Weg. Die nächsten 20 Meter gehen wir also in diese Richtung. Dann wird erneut in Richtung Ziel geprüft...
Generell ist diese Art der Prüfung kein Problem. Ich benutze um den Kreis zu berechnen, in dessen Richtung die Strecke Abschnittsweise geprüft werden soll die Formel aus dem Beispielcode von PB in "Math". Um das ganze nicht durchgehend im Kreis zu prüfen habe ich es in 20 Abschnitte unterteilt.
Code: Alles auswählen
For y = 1 To 20
ZielX = PosX+cos(0.314*y)*#PRUEFUNGSLAENGE-sin(0.314*y)*#PRUEFUNGSLAENGE
ZielZ = PosZ+cos(0.314*y)*#PRUEFUNGSLAENGE-sin(0.314*y)*#PRUEFUNGSLAENGE
;Wenn zwischen dem neuen Ziel und der Position kein Wasser ist unterbreche die Schleife, wenn doch dann mache weiter
Next
Code: Alles auswählen
For y = 1 To 20
ZielX = PosX+cos(0.314*y+Zusatzwinkel)*#PRUEFUNGSLAENGE-sin(0.314*y+Zusatzwinke)*#PRUEFUNGSLAENGE
ZielZ = PosZ+cos(0.314*y+Zusatzwinkel)*#PRUEFUNGSLAENGE-sin(0.314*y+Zusatzwinke)*#PRUEFUNGSLAENGE
;Wenn zwischen dem neuen Ziel und der Position kein Wasser ist unterbreche die Schleife, wenn doch dann mache weiter
Next
Ich bin sehr schlecht im erklären, hoffe aber das Problem einigen etwas näher gebracht zu haben und bitte euch um Hilfe.