Actionscript Угол триггера линии - PullRequest
2 голосов
/ 19 августа 2009

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

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

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

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

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

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 20 августа 2009

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

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

1 голос
/ 19 августа 2009

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

tan(theta) = opposite / adjacent

Что дает:

angle = arctan(opposite / adjacent)

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

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

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

1 голос
/ 19 августа 2009

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

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

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

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

angleInDegrees = angle * 180/Math.PI;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...