2009-08-19 10 views
2

Wie kann ich den Winkel einer Linie zwischen zwei Punkten in Actionscript finden 3.Action Winkel einer Linie Trig

Ich habe ein Objekt, das die Punkte gegeben Pfeile beseelt aus dynamisch, die Anfang darstellen, Ellbogen, und dann Endpunkt.

ich brauche die Winkel der Linie auf den Pfeil an der Spitze zu drehen, genau mit dem aktuellen Segment-zu-Punkt

gezogen wird

I können die Winkel für die rechtwinkelige Linien leicht erhalten durch Erfassen, wenn eine Achse 0, aber Notwendigkeit der Winkel einer beliebigen Linie zwischen zwei Punkten.

Ich kenne die Punkte für eine Linie bekommen z.B. zeichnen Sie eine 100px Linie bei 47 Grad:

var length:Number = 100; 
var angle:uint = 48 
graphics.lineTo(Math.cos(angle) * length, Math.sin(angle) * length); 

sind aber kämpfen, um den Winkel von der Linie zu erhalten:

, was ich brauche, ist

gegebener Startpunkt und Endpunkt einer Linie, was ist der Winkel der Linie.

vielen Dank für jede und alle suggustions

Antwort

5

Jeder schlägt Formeln vor, die Math.atan() verwenden und Vorbehalte für 0 Fälle im Nenner geben. Es gibt eine ganze Funktion, die das schon tut - es ist Math.atan2().

Geben Sie einfach in ein X- und ein Y-Wert, und es gibt Ihnen einen Winkel. Keine speziellen Fälle - nur Koordinaten. Wie üblich ist der Rückgabewert in Radianten von -pi bis + pi.

+0

sehr cool, werde ich in die –

+0

Ich lief in die 0 im Nenner, Ausfiltern mit wenn Aussagen für jetzt aber atan2 ist viel elegent –

1

Die Formel für den Winkel (auch die Neigung der Linie genannt) ist wie folgt:

angle = Math.atan((y2 - y1)/(x2 - x1)) 

Wo: (x1, y1) sind die Koordinaten des ersten Punktes (Anfang der Linie) und (x2, y2) sind die Koordinaten des zweiten Punktes (Ende der Linie)

Beachten Sie auch, dass der Winkel im Bogenmaß angegeben wird, wenn Sie den Winkel berechnen müssen in Grad musst du mit 180 multiplizieren Teilen durch PI:

1

Sie sind auf dem richtigen Weg dorthin mit Ihrer Formel für den Endpunkt der Linie. Sie müssen nur die Gleichung invertieren:

tan(theta) = opposite/adjacent 

Welche gibt:

angle = arctan(opposite/adjacent) 

Wo das Gegenteil der Höhe (y) und angrenzend an die Länge (x).

Seien Sie vorsichtig, da dies zusammenbricht, wenn das benachbarte Null ist (dividiere durch Null) und arctan eine Ausnahme für Null selbst auslöst, also müssen Sie die Spezialfälle der Linie vertikal oder horizontal abfangen.

Als Miky D den Winkel weist darauf hin, ist in Radian, aber Sie werden es wahrscheinlich den Winkel des Pfeilspitze für die Berechnung der ohnehin in dieser Form müssen.