Как да определим ъгъла на завъртане на точка

Имам 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
На Python е. Точките обаче се предоставят от софтуер, който не ми позволява да манипулирам verts чрез извикване на API. Трябва да намеря ъгъла и след това да направя завъртане. Затова пропуснах езика. Просто търся подход на по-високо ниво.   -  person user2970916    schedule 26.01.2015
comment
@templatetypedef да   -  person user2970916    schedule 26.01.2015
comment
@user2970916: Предполагам, че имате предвид завъртане около началото, тъй като няма z-ос в 2D равнина?   -  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