Zum Beispiel GetAngle ((0,0), (100,0), (100,100)) = 90. Wie kann ich den Winkel zwischen 3 2D-Punkten finden?Winkel zwischen 3 Scheitelpunkten
Antwort
Mit den Punkten A, B und C möchten Sie den Winkel zwischen AB und AC? Berechne zuerst die Vektoren AB und AC - es sind nur die Koordinaten von B minus Koordinaten von A und ebenso für AC. Nehmen Sie die dot product der beiden Vektoren. Dies ist nur das Produkt der x-Koordinaten plus das Produkt der y-Koordinaten der Vektoren. Teilen Sie diese Zahl durch die Länge von AB und nochmals durch die Länge von AC. Dieses Ergebnis ist der Kosinus des Winkels zwischen den beiden Vektoren, also nehmen Sie den Arccos() und Sie haben es.
das Skalarprodukt Verwendung:
(a,b,c) dot (d,e,f) = ad + be + bf
.
A dot B = length(A)*length(B)* cos(theta)
theta = arccos((A dot B)/(length(A)*length(B))
ist der Winkel zwischen den Vektoren A und B
Dies ist einfach, wenn Sie einige grundlegende Kenntnisse der linearen Algebra haben.
Ein Vektor v (im Sinne der linearen Algebra, nicht std :: vector;)) ist ein Tupel v = (x, y, z).
Die Norm ist die Länge des Vektors | v | = Sqrt (x x + y y + z * z)
Das innere Produkt von zwei Vektoren v1 = (x1, y1, z1) und v2 = (x2, y2, z2) ist v1 · v2 = x1 * x2 + y1 * y2 + z1 * z2
der Winkel der Vektoren v1 und v2 ist a = acos (v1 · v2/(| v1 | * | v2 |))
Danke! Ich mag das auch :-) – jmasterx
Das Problem bei nur die Verwendung von Punkt Produkt ist hier, dass es in der Nähe von 0 oder 180 Grad instabil ist - die Steigung von acos() nähert sich der Unendlichkeit in der Nähe von +/- 1,0, was dazu führen wird, dass Sie die Präzision verlieren.
Um dies zu beheben, können Sie eine pseudo-Kreuzprodukt berechnen kann, und verwenden Sie atan2() wie folgt:
// given A, B, C are 2D points:
BA= B - A; CA= C - A // vector subtraction, to get vector between points
dot= BA.x * CA.x + BA.y * CA.y
pcross= BA.x * CA.y - BA.y * CA.x
angle= atan2(pcross, dot) // this should be the angle BAC, in radians
numerisch robust Dies sollte es sei denn, einer der Schenkel des Winkels der Länge Null hat.
Beachten Sie, dass dies auch einen signierten Winkel ergibt, abhängig davon, ob BAC im Uhrzeigersinn oder gegen den Uhrzeigersinn läuft; Die Methode acos() liefert Ihnen immer einen positiven Wert. Wenn Sie nur einen positiven Winkel wünschen, können Sie natürlich auch abs(angle)
; Die Methode atan2() wird immer noch robuster und wahrscheinlich schneller sein.
- 1. Winkel zwischen 3 Punkten?
- 2. Wie in JavaScript Winkel zwischen 3 Punkten zu berechnen?
- 3. Plot Winkel zwischen Vektoren
- 4. Passende Winkel zwischen Kanten
- 5. Ist das Teilen von Scheitelpunkten zwischen Gesichtern es wert?
- 6. R igraph - Geben Sie den Mindestabstand zwischen den Scheitelpunkten an
- 7. Gefundene signierte Winkel zwischen Vektoren
- 8. Matlab Winkel zwischen zwei Punkten
- 9. Dynamische Paginierung mit Winkel- und Bootstrap 3
- 10. Winkel zwischen 2 GLKMatrix4 Objekt in OpenGLES?
- 11. Berechnung Winkel zwischen zwei Punkten - Java
- 12. Finden Sie den Winkel zwischen zwei Lager
- 13. Signierter Winkel zwischen zwei Vektoren ohne Referenzebene
- 14. Winkel zwischen zwei Breiten-/Längenpunkten berechnen
- 15. Der Unterschied zwischen ":" und =“in Winkel 2
- 16. Winkel JS - Kommunikation zwischen nicht-abhängige Dienste
- 17. Unterschied zwischen angular2/Kern und @ Winkel/Kern
- 18. Winkel zwischen 3 Punkten mit Vektor berechnen, mehr Genauigkeit benötigt (Java)
- 19. Glätten von Scheitelpunkten in MeshGeometry3D (WPF)
- 20. Hinzufügen von Punkten zu Scheitelpunkten in Three.js
- 21. Erhalten Winkel zwischen dem Punkt und dem Ursprung
- 22. Raum zwischen Bootstrap 3 Tasten
- 23. Seite nach 3 Sekunden neu laden mit Winkel
- 24. Wie 3 divs nebeneinander bekommen unter einem Winkel
- 25. Erstellen von Formen basierend auf Sphere Scheitelpunkten ThreeJs
- 26. Erstellen von Graphen aus Textdateien von Scheitelpunkten und Kanten
- 27. minimaler Schnitt zwischen zwei beliebigen Scheitelpunkten, die als Eingabe für einen ungerichteten ungewichteten Graphen verwendet werden
- 28. Ich muss den Winkel zwischen zwei Sätze von Rollen und Gieren Winkel finden
- 29. Finden von Scheitelpunkten ohne Vorgänger-/Kanteneingänge in igraph R
- 30. Was ist der Unterschied zwischen 3/2 und -3/2?
Wenn dies eine Mathematik-Website wäre, wäre ich versucht, diese Hausaufgabe zu markieren. ;) Das ist einfache Trigonometrie. http://en.wikipedia.org/wiki/Trigonometry#Common_formulas – Cogwheel
Nein, es ist für ein persönliches Projekt – jmasterx