Winkel zwischen den Punkten?
Habe ich ein Dreieck (A, B, C) und bin auf der Suche nach der Winkel zwischen jeweils zwei der drei Punkte.
Das problem ist, dass die algorithmen, die ich online finden kann, sind für die Bestimmung der Winkel zwischen Vektoren. Mit Vektoren würde ich berechnen Sie den Winkel zwischen den Vektoren, die von (0, 0) zum Punkt ich habe, und das bedeutet nicht, geben Sie mir die Winkel innerhalb des Dreiecks.
OK, hier ist etwas code in Python nach der Methode auf der Wikipedia-Seite und nach Subtraktion der Werte:
import numpy as np
points = np.array([[343.8998, 168.1526], [351.2377, 173.7503], [353.531, 182.72]])
A = points[2] - points[0]
B = points[1] - points[0]
C = points[2] - points[1]
for e1, e2 in ((A, B), (A, C), (B, C)):
num = np.dot(e1, e2)
denom = np.linalg.norm(e1) * np.linalg.norm(e2)
print np.arccos(num/denom) * 180
Gibt, die mich 60.2912487814, 60.0951900475 und 120.386438829, also was mache ich falsch?
- Wie ist dein Dreieck dargestellt? 3 paar
(x,y)
Koordinaten? - ja, einfach so. @peter ich will einfach nur einen Algorithmus verwenden, so können Sie java - /c++ - synthax oder python. ich verstehe beide
- Ist das tatsächlich eine Frage der Programmierung? Nach ein paar source-code, ansonsten gehört dies auf math.stackexchange.com
- Der Vektor von einem Punkt
X
zu einem anderen PunktY
istY-X
- Was meinst du mit
angles inside the triangle
? - ich habe versucht, aber hat nicht die erwarteten Ergebnisse erhalten. obwohl die Punkte, die ich verwende sind alle positiv und so Sie fallen erst auf den ersten Quadranten, also vielleicht habe ich einen Fehler gemacht. hmm.
B-A
&C-A
gibt zwei Vektoren. Und das Skalarprodukt zwischen Ihnen gibt den Winkel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Fehler hier.
Verpasst du einen Faktor von π bei der Umrechnung von Bogenmaß in Grad (es × 180 /π)
Müssen Sie vorsichtig sein, über die Anzeichen von Vektoren, da Sie gerichteten Liniensegmente.
Wenn ich diese änderungen bekomme ich ein Ergebnis, das Sinn macht:
dem Drucke
Würd ich wahrscheinlich machen die Dinge mehr symmetrisch, und verwenden Sie A, B, C Vektoren, die zyklische und die Summe null:
dem Drucke
Das minus-Zeichen in der dot-Produkt gekommen, weil wir versuchen, den inneren Winkel.
Tut mir Leid, wir fuhren Sie Weg in Ihrer Zeit der Notwendigkeit, durch die Schließung der Frage.
Ich würde das Gesetz der Cosinus, da kann man leicht berechnen Sie die Länge jeder Seite des Dreiecks, und dann lösen Sie für jeden Winkel einzeln.
Alternativ, wenn Sie nur wissen, die Länge der Seiten des Dreiecks, können Sie die Gesetz der Cosinus.
Angenommen, Sie möchten den Winkel bei A. Dann müssen Sie den Winkel zwischen den Vektoren von A nach B und der Vektor von A zu C. Der Vektor von A nach B ist nur B-A. (Subtrahieren Sie die Koordinaten ein.)
Erstellen Sie drei Vektoren, die man von v2 auf v1 (v2-v1), ein von v3 zu v1 (v3-v1), und eine von v3 nach v2 (v3-v2). Sobald Sie diese drei Vektoren, die Sie verwenden können, die algorithmen, die Sie bereits gefunden, zusammen mit der Tatsache, dass alle Winkel wird zu 180 Grad.