Угол ActionScript для триггера линии

Как я могу найти угол линии между двумя точками в ActionScript 3.

У меня есть объект, который динамически анимирует стрелки наружу, учитывая точки, которые представляют начало, изгибы и затем конечную точку.

Мне нужен угол линии, чтобы повернуть стрелку на кончике, чтобы она точно указывала на текущий сегмент, который рисуется

Я могу легко получить угол для прямых угловых линий, определив, равна ли одна ось 0, но мне нужен угол любой линии между двумя точками.

Я знаком с получением очков за линию, например. нарисуйте линию 100 пикселей под углом 47 градусов:

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

но я изо всех сил пытаюсь получить угол от линии:

что мне нужно, это

учитывая начальную и конечную точки линии, каков угол линии.

большое спасибо за любые предложения


person Fire Crow    schedule 19.08.2009    source источник


Ответы (3)


Все предлагают формулы, используя Math.atan (), давая предостережения для 0 случаев в знаменателе. Есть целая функция, которая уже делает это - это Math.atan2 ().

Просто введите значения X и Y, и вы получите угол. Никаких особых случаев - только координаты. Как обычно, возвращаемое значение выражается в радианах, от -pi до + pi.

person HanClinto    schedule 19.08.2009
comment
Я наткнулся на 0 в знаменателе, отфильтровав на данный момент операторы if, но atan2 намного более элегантен - person Fire Crow; 20.08.2009

Формула для угла (также называемого наклоном прямой) выглядит следующим образом:

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

Где: (x1, y1) - координаты первой точки (начало строки), а (x2, y2) - координаты второй точки (конец строки)

Также обратите внимание, что угол возвращается в радианах, поэтому, если вам нужно получить угол в градусах, вам нужно умножить его на 180 и разделить на PI:

angleInDegrees = angle * 180/Math.PI;
person Mike Dinescu    schedule 19.08.2009

Вы находитесь на правильном пути со своей формулой для получения конечной точки линии. Вам просто нужно перевернуть уравнение:

tan(theta) = opposite / adjacent

Который дает:

angle = arctan(opposite / adjacent)

Где напротив - высота (y), а рядом - длина (x).

Будьте осторожны, так как это не работает, когда смежное значение равно нулю (делится на ноль), а arctan вызывает исключение для самого нуля, поэтому вам нужно улавливать особые случаи, когда линия является вертикальной или горизонтальной.

Как указывает Мики Д, угол указывается в радианах, но он, вероятно, понадобится вам в такой форме для вычисления угла острия стрелки.

person ChrisF    schedule 19.08.2009