Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > повороты векторов


Автор: Alek86 25.12.2007, 15:38
Есть 2 вектора равной длины (A и B):
(Xa, Ya, Za) (Xb, Yb, Zb)

мож, у кого-то есть формулы для опеределения Эйлеровых углов поворота, таких, чтобы при повороте на них, A совпал с B?

Автор: cardinal 25.12.2007, 16:16
Ну наверно можно обнулить сначала Za и Zb и получить первый угол, а потом обнулить две другие координаты и получить второй угол (то есть посмотреть на проекции)... Это так - первое что на ум приходит. smile

Автор: Alek86 25.12.2007, 19:11
похоже на правду smile
чет я вообще туда не думал :(
спасибо, попробую

Автор: Alek86 26.12.2007, 12:44
как ожидалось, не все так просто

если есть векторы A(0; 0; 1) и B (0; 0; -1), то получится, словно вектор A нужно повернуть на 180 градусов по xOy и на 180 градусов по xOy, а это неверно

Автор: Lazin 26.12.2007, 13:22
а если преобразовать в полярные координаты, так будет проще посчитать...

Автор: cardinal 26.12.2007, 16:26
Цитата(Alek86 @  26.12.2007,  11:44 Найти цитируемый пост)
если есть векторы A(0; 0; 1) и B (0; 0; -1), то получится, словно вектор A нужно повернуть на 180 градусов по xOy и на 180 градусов по xOy, а это неверно

Интересно почему?

Автор: Alek86 27.12.2007, 10:12
Цитата(cardinal @  26.12.2007,  16:26 Найти цитируемый пост)
Интересно почему?


там я ошибся
по плоскостям xOz и yOz соответственно

потому что, если повернуть вектор (0, 0, 1) по xOz на 180 градусов, то получится (0, 0, -1)

а если повернуть вектор (полученный) (0, 0, -1) по yOz на 180 градусов, то получится снова (0, 0, 1)

Автор: cardinal 27.12.2007, 16:33
Ну два варианта решения значит - можно так повернуть, можно так...

Автор: AndreyK 27.12.2007, 16:34

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

А если поворачивать вокруг оси перпендикулярной плоскости в которой лежат вектора, то угол можно найти так:

Скалярное произведение векторов = Xa*Xb+ Ya*Yb + Za*Zb = оно же = R*R*cos(f), где f - угол между ними. R - длина обоих векторов.


Автор: Alek86 28.12.2007, 13:32
Цитата(cardinal @  27.12.2007,  16:33 Найти цитируемый пост)
Ну два варианта решения значит - можно так повернуть, можно так...

жаль только, что неясно что в общем случае считать за правильное решение, а что - ха второе правильное решение smile


Цитата(AndreyK @  27.12.2007,  16:34 Найти цитируемый пост)
А если поворачивать вокруг оси перпендикулярной плоскости в которой лежат вектора, то угол можно найти так:

знаю и с рабостью бы воспользовался, но функция, которую хотел использовать, принимает именно эти 3 злдлосчастных вектор smile

в общем, вопрос не решен, как понимаю, но я уже выпеднрился без этой функции
даже не знаю, закрывать тему, или нет....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)