Uhrzeigersinn anhand von Koordinaten

T-M

Mitglied
Hallo liebe Community!

Im Rahmen einer Projektarbeit in der Schule sollen wir einen Roboter programmieren, der neben verschiedenen Lagern und Tankstellen auch Baustellen anfahren soll. Jede Baustelle besitzt Koordinaten (x,y), wobei es insgesamt vier Stück gibt. (je nach "Level" verschieden angeordnet). Der Roboter startet ebenfalls bei zufälligen Koordinaten.


Nun stehe ich vor folgendem Problem (die nächstgelegene Baustelle habe ich über Pythagoras errechnet): Wie finde ich heraus, welche Baustelle im uhrzeigersinn als nächstes folgen würde (unabhängig von der Entfernung). Insgesamt möchte ich so die Baustellen nacheinander im uhrzeigersinn ansteuern.


Vielen Dank schonmal und einen sonnigen Tag noch 🙂

T-M
 
Sofern es nicht 10000 Tankstellen sind, kannst dir ja die Winkeln angucken, wo es am kleinsten ist, so wie im Anhang angedeutet.

P.S. Nicht Tankstellen, sondern Baustellen, aber es ist Jacke wie Hose
 

Anhänge

  • roboter.png
    roboter.png
    17,3 KB · Aufrufe: 45
Um die Baustellen im "Uhrzeigersinn" abfahren zu können, benötigst du zunächst mal eine Mitte um die sozusagen der Zeiger läuft. Ich nehme an, diese Mitte sei die Position des Baggers.
Dann kannst du die Winkel der einzelnen Baustellen zu dieser Mitte finden und entsprechend deine Sortierung festlegen.
Die Winkelbestimmung könnte so laufen:
Seien XB,YB die Koordinaten des Baggers und XS,YS die Koordinaten einer Baustelle, dann könnte jeweils ein Winkel z.B.
so bestimmt werden.
[c]dblWinkelArc = atan2(YS-YB, XS-XB)[/c]
Du erhältst so Winkel zwischen -pi und +pi (Winkel sind im Bogenmass, pi entspricht 180°)
(siehe auch ATAN2 bei wikipedia)
Achtung: Befände sich der Bagger zufällig bereits an einer der Baustellen, liese sich kein Winkel bestimmen.
 
Der Abstand der punkte P1(XB,YB) und P2(XS,YS) berechnet sich mit:
[c] dblR = sqrt( (XB-XS)*(XB-XS) + (YB-YS)*(YB-YS) ) [/c]
 
Hallihallo,

vielen Dank für eure SCHNELLEN Antworten!

An Winkel hatte ich auch schon gedacht, jedoch frage ich mich, wie ich dem Robo mitteilen soll, welche der beiden Baustellen angefahren werden soll. Mit dem kleinsten Winkel habe ich ja nunmal 2 Baustellen als Ergebnis. Und dann automatisch die Baustelle mit dem gerinsten Abstand zu nehmen, würde zu Fehlern führen?! ???:L
 
Also ich verstehe dein Problem vielleicht nicht wirklich, aber ich dachte an folgende Strategie:
- Erfasse die Positionen der Baustellen in einem Array
- Berechne Winkel und Abstand aller Baustellen zur Anfangsposition des Baggers und erfasse diese ebenfalls im Array
- Sortiere das Array 1. nach Winkel und 2. nach Abstand (z.B. bei gleichem Winkel zuerst die mit dem kleineren Abstand).
- Fahre die Positionen gemäß der Sortierung in deinem Array ab
Wenn du bei jeder Baustelle erst entscheiden willst, welche dann wieder die nächste ist,
machst du es dir unnötig schwer, denk ich.
 
Wenn es dir wichtig ist, dass du mit der nächstgelegenen Baustelle anfängst
(da könnte es ja dann auch mehrere geben und du würdest dann irgendeine beliebige davon wählen ?)
dann subtrahierst du vielleicht, bevor du das Array sortierst bei allen Winkeleinträgen des Array den Winkel der zuerst anzufahrenden Baustelle, ist ein Winkel damit negativ, so addierst du 360° (sprich 2*pi).
So würde diese nächstgelegene Baustelle den kleinsten Winkel (nämlich 0°) und den kleinsten Abstand haben, somit auch nach der Sortierung die Erste sein.
 
Danke OldBoy! Genau so haben wir es jetzt umgesetzt. Anfangs wollte ich zwar zu jedem Zeitpunkt die Winkel berechnen, aber jetzt berechnen wir sie einmalig und fahren dann das Array nach ein ander ab.

THX!
 

Zurück
Oben