Как определить угол поворота точки

У меня есть 2 точки в плоскости x, y. Я хочу повернуть одну точку на другую, повернув ее вокруг оси Z.

Как найти угол поворота одной точки на другую?


person user2970916    schedule 26.01.2015    source источник
comment
С каким языком вы работаете? Предоставьте свой гипотетический код.   -  person Rafael    schedule 26.01.2015
comment
Находятся ли две точки в одной плоскости, так что вращение по оси Z точно выровняет их?   -  person templatetypedef    schedule 26.01.2015
comment
Это на Питоне. Однако точки предоставляются программным обеспечением, которое не позволяет мне манипулировать вершинами через вызов API. Я должен найти угол, а затем сделать вращение. Вот почему я исключил язык из обсуждения. Просто ищу подход более высокого уровня.   -  person user2970916    schedule 26.01.2015
comment
@templatetypedef да   -  person user2970916    schedule 26.01.2015
comment
@ user2970916: Я полагаю, вы имеете в виду вращение вокруг начала координат, поскольку в 2D-плоскости нет оси Z?   -  person njuffa    schedule 26.01.2015
comment
Вращение происходит в 2D-плоскости, но происходит вокруг начала координат, которое может быть представлено осью z.   -  person user2970916    schedule 26.01.2015
comment
Может быть, набросок поможет прояснить ситуацию.   -  person John Alexiou    schedule 26.01.2015
comment
Я хотел бы разместить эскиз, однако я не вижу изображения на SO с моего рабочего компьютера. Таким образом, я не знаю, выглядит ли эскиз правильно.   -  person user2970916    schedule 26.01.2015


Ответы (2)


Что ж, sin этого угла равно [a, b] / (abs(a) * abs(b)), а его cos равно (a, b) / (abs(a) * abs(b)), где [a, b] — это векторное произведение a и b, (a, b) — скалярное произведение, а abs(x) — длина вектора x. Довольно легко найти угол, зная его sin и cos.

person kraskevich    schedule 26.01.2015

Возможно, лучше всего получить углы от горизонтали для двух точек, а затем взять разницу.

angle_1 = atan2( y_1, x_1 );
angle_2 = atan2( y_2, x_2 );

rotation_angle = angle_1-angle_2;
person John Alexiou    schedule 26.01.2015