So berechnen Sie den Winkel zwischen zwei richtungsvektoren, die eine geschlossene/offene Form?
Ich versuche, herauszufinden, die richtige trig. eq./Funktion, um Folgendes zu bestimmen:
Die Winkel-Veränderung (in GRAD) zwischen zwei richtungsvektoren(bestimmt schon), dass zwei line-segment.
Dies ist im Kontext von FORM RECOGTNITION (hand-gezeichnet durch den Benutzer auf dem Bildschirm).
ALSO im Grunde,
a) wenn der Benutzer zieht eine (grobe) Form, wie ein Kreis oder ein oval oder Rechteck, etc - die Zeilen, die macht, die Form gebrochen sind, um zu sagen:.. 20 Punkte(x-y-Paare).
b) ich habe die DirectionVector) für jedes dieser Liniensegmente.
c), So daß der ANFANG eines SEGMENTS(x0,y0), wird der Endpunkt der vorherigen Linie(so die form eine geschlossene Form wie ein Rechteck, sagen wir).
SO, meine Frage ist , angesichts der Kontext(d.h. determinign der Typ eines Polygons), wie findet man den Winkel ändern zwischen zwei richtungsvektoren(verfügbar als zwei Gleitkomma-Werte für x und y) ???
Habe ich gesehen, so viele verschiedene trig. Gleichungen und ich Suche Klarheit.
Vielen Dank im Voraus Leute!
InformationsquelleAutor ImmortalBuddha | 2010-11-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn (x1,y1) ist der erste Richtungsvektor und (x2,y2) ist also das zweite, es gilt:
cos( alpha ) = (x1 * x2 + y1 * y2) /( sqrt(x1*x1 + y1*y1) * sqrt(x2*x2 + y2*y2) )
sqrt bedeutet Quadratwurzel.
Nachschlagen http://en.wikipedia.org/wiki/Dot_product
Insbesondere den Abschnitt "Geometrische Darstellung".
Eine kleine weitere Sache: Da du neu bist hier: Sie können die up-vote-Antworten, und Sie können auch wählen Sie eine für die "akzeptierte" Antworten. Dieses hebt das "ansehen" der person, die beantwortet, so ist es eine nette Sache zu tun 🙂
Ja.. ich habe gerade gemerkt, dass... und war gonna sagen: "sei sanft mit mir" wie ich bin nicht wirklich jemand, der verbringt viel Zeit online in der Regel und so dont' do-Foren, die Häufig, wie die meisten von Euch tun. Ich gebe Ihr die up-vote für heute. Sobald ich die Lösung implementieren wähle ich die "richtige" Antwort. 🙂 Vielen DANK! 🙂
Hi, noch eine Frage Largebaer.. :0, die Sie zugewiesen haben, das Ergebnis der Berechnung in eine cos () - Funktion. Was bedeutet "alpha"? Wenn ich Schreibe C++ - code, wissen Sie, wie die lhs(left-hand-side vertreten sein werden)?
Nehmen Sie den arc-Cosinus auf beide Seiten der Gleichung-dann alpha = acos( (x1*x2 + y1*y2)/bla bla bla). Alpha wird der Winkel, den Sie suchen (und wird wahrscheinlich in Einheiten von Rad).
InformationsquelleAutor Lagerbaer
Könnten Sie versuchen, atan2:
aber auch, wie in den vorherigen Antworten erwähnt, die
Winkel zwischen zwei verctors = acos(ersten.dotProduct(Sekunde))
UPDATE für alle: ich bin nicht immer der richtige Winkel für jede Kombination von Daten(Linien), mit einer der oben beschriebenen Methoden. Ich dachte .. kann sein das es meine DirectionVector Berechnung Funktionen, die fehlerhaft sind, aber Sie scheinen korrigieren, da ich die Leitungen ziehen und den Wert ssupplied... Also muss ich ot schauen Sie in diese. Bleibt dieses blog gepostet, bis das problem gelöst ist. Danke an alle, die beigetragen haben so weit. ~IB~
InformationsquelleAutor George Profenza
Ich vermute, Sie haben den Vektor als drei Punkte (x_1, y_1), (x_2, y_2) und (x_3, y_3).
Dann können Sie verschieben die Punkte so, dass (x_1, y_1) == (0, 0), die von
(x_1, y_1) = (x_2, y_2) - (x_1, y_1)
(x_2, y_2) = (x_3, y_3) - (x_1, y_1)
Jetzt haben Sie diese situation:
Denke, dass dieses Dreieck in zwei rechtwinklige Dreiecke. Das erste hat die Winkel alpha und ein Teil von beta, des zweiten rechtwinkligen Dreieck hat der andere Teil der beta.
Dann können Sie sich bewerben:
Können Sie berechnen, wie alpha:
InformationsquelleAutor Martin Thoma
Wenn ich Sie richtig verstehe, können Sie nur bewerten, die dot product zwischen zwei Vektoren und die entsprechenden arccos zum abrufen der Winkel zwischen diesen Vektoren.
InformationsquelleAutor Hey-hou