2016-08-01 16 views
-2

Ich bin Skripte in Python für Anfänger. Dieses Beispiel einfach zu machen, habe ich eine Kante, mit uv-Koordinaten von ([0,0], [1,1]), so ist es ein 45-Grad-Winkel. Ich habe eine andere Kante, die ([0,0], [0,1]) ist, also ist ihr Winkel 0/360 Grad. Mein Ziel ist es, die Winkel dieser beiden Kanten zu vergleichen, um die Differenz zu erhalten, so dass ich den Winkel der zweiten Kante so ändern kann, dass er dem Winkel der ersten Kante entspricht. Gibt es eine Möglichkeit, dies über Vektormathematik zu tun?Passende Winkel zwischen Kanten

+0

Ihre Frage ist nicht klar. Sind Sie sicher, dass die ersten Listen (Punkte) in diesen beiden Tupeln (Kanten) gleich sind? Willst du die Winkel zwischen diesen beiden Vektoren berechnen? Wenn beide Ja sind, verwenden Sie das Kosinusgesetz oder das Skalarprodukt (die im Grunde gleich sind). Sie könnten auch die atan2() -Funktion verwenden, aber das ist komplizierter. –

+0

Die Punkte sind UV-Koordinaten, keine XYZ-Koordinaten, die Kanten sind ein Paar dieser Koordinaten. – Kenny

+0

Ich habe ein Codebeispiel für ein Punktprodukt, um Vektoren zwischen drei Punkten zu vergleichen, um zu sehen, ob sie gleich sind. Ich bin mir jedoch nicht sicher, wie ich den Unterschied im Winkel ermitteln soll. – Kenny

Antwort

0

Am einfachsten zu rekonstruieren und somit konstruktiv zu erinnern ist IMO das komplexe Bild. Um den Winkel von a=a.x+i*a.y zu b=b.x+i*b.y zu berechnen, drehen Sie b zurück, indem Sie mit dem Konjugierten von a multiplizieren, um einen Winkel vom Nullwinkel resp. die positive reelle Achse,

arg((a.x-i*a.y)*(b.x+i*b.y)) 

=arg((a.x*b.x+a.y*b.y)+i*(a.x*b.y-a.y*b.x)) 

=atan2(a.x*b.y-a.y*b.x , a.x*b.x+a.y*b.y) 

anzumerken, dass Bildschirmkoordinaten die entgegengesetzte Orientierung zur kartesischen/komplexen Ebene verwenden, wodurch die Verwendung ändern, um einen Vorzeichenschalters, wie aus atan2(y,x) zu atan2(-y,x) einen Winkel in der gewöhnlichen Richtung zu erhalten.


Um einen Vektor b gedrehten Winkel (in Radiant) w aus a, vermehren sich durch cos(w)+i*sin(w) zu produzieren

b.x = cos(w)*a.x - sin(w)*a.y 
b.y = cos(w)*a.y + sin(w)*a.x 

Sie müssen erhalten werden rescale eine bestimmte Länge von b zu erhalten.

+0

Ich bin mir nicht sicher, ob ich dir folgt LutzL ... sind a und b, 45 bzw. 0? – Kenny

+0

Nein. Mit Zahlen aus Ihrer Frage könnte es sein: a = (a.x, a.y) = (1,1) 'und' b = (1,0) '. Im Allgemeinen sind diese Vektoren die Unterschiede zum Rotationszentrum, was (wahrscheinlich) in Ihrer Frage "(0,0)" war. – LutzL

Verwandte Themen