Рассчитать градусы для поворота мувиклипа - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть видеоклип, представляющий стрелку (с точкой регистрации в ее середине). Когда я нажимаю кнопку, стрелка должна указывать на определенный видеоклип на сцене. Я использую этот код для выполнения Tween:

TweenLite.to(arrow_clip,1,{rotation:degrees});

но я не могу понять, как рассчитать градусы. Я безуспешно пробовал следующее:

var degrees =Math.atan2((clip.y-arrow_clip.y),(clip.x-arrow_clip.x))*(180/Math.PI);

Вы можете мне помочь?

[РЕДАКТИРОВАТЬ]: я обнаружил, что работает следующее, но я не могу полностью понять, почему:

var degrees = -(Math.atan2(arrow_clip.x-clip.x, arrow_clip.y-clip.y))*(180/Math.PI);

Ответы [ 3 ]

0 голосов
/ 06 сентября 2011

Ваше последнее решение не вычисляет угол между (clip, arrow_clip), но поворачивает его на 90 ° C, то есть PI / 2.

0 голосов
/ 06 сентября 2011

Чтобы найти угол между двумя точками, вы можете использовать:

atan(dy/dx) или atan2(dy,dx)

, где dy = to.y - from.y и dx = to.x - from.x

Это будетВы получите радианы от горизонтальной оси, где 0 будет справа.Однако свойство rotation во Flash - это градусы от вертикальной оси, где 0 - вверх.Поэтому вам нужно повернуть это в градусы и повернуть на 90 градусов, потому что если atan говорит 0 радиан, то в пространстве Flash это 90 градусов и -PI / 2 радиан = 0 градусов и т. Д.

Должно работать следующее:

var degrees = Math.atan2(clip.y-arrow_clip.y,clip.x-arrow_clip.x)*(180/Math.PI) + 90;

Второй опубликованный вами пример работает, потому что он выполняет поворот на 90 градусов, переключаясь вокруг осей и инвертируя результат.Он рассчитывает от clip до arrow, а затем -atan(dx/dy).Обратите внимание, что его dx превышает dy (вместо того, что должно быть) и сводит на нет результат.По сути, делает для вас поворот на 90 градусов.

0 голосов
/ 06 сентября 2011

Я полагаю, вы "отразили" угол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...