Prüfen ob Vektor zwischen 2 Vektoren liegt
-
Ich würde gerne überprüfen können ob ein Normalisierter Vektor zwischen 2 anderen Normalisierten Vektoren liegt.
Zu vergleichen mit einer Uhr:
Ist es 7.30 ist es zwischen 7 und 8
ist es 4.00 ist es nicht zwischen 4 und 6nur halt mit Vektoren, so dass ich eingeben kann:
isBetween(Vektor a,Vektor b, Vektor v);
und die Funktion soll dann ausgeben können ob v zwischen a und b liegt.
Ich könnte die Vektoren natürlich in Grad umrechenen, doch ich habe mich gefragt, ob es nicht auch mit weniger Rechen-Aufwand geht.
Hat jeman deine Idee?
-
Es gibt ein Left-of-... und ein Right-of-... Test, der sehr effizient mittels Skalarprodukt/Kreuzprodukt ausgedrueckt werden kann.
-
ok, danke ich googels mal
-
Google ist da nicht sehr entgegenkommend, vielleicht wird es auch anders benannt. Du testest ob dein Punkt links von einer Strecke liegt. Dein zweiter Punkt fuer deinen 7 Uhr-Zeiger ist das Zentrum/Ursprung. D.h. die Frage lautet: Liegt p rechts von (O, 7 Uhr) und liegt p links von (0, 8 Uhr)? (Wobei O die Mitter der Uhr ist. Da O aber fest ist, kannst du es auch aus-xen).
Beispielsweise findet es Anwendung bei konvexer Huelle mittels Grahams Scan: http://en.wikipedia.org/wiki/Graham_scan . Dort ist auch das ccw-Praedikat beschrieben.
-
ok, funktioniert jetzt, danke