Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > повороты векторов |
Автор: 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 и получить первый угол, а потом обнулить две другие координаты и получить второй угол (то есть посмотреть на проекции)... Это так - первое что на ум приходит. ![]() |
Автор: Alek86 25.12.2007, 19:11 |
похоже на правду ![]() чет я вообще туда не думал :( спасибо, попробую |
Автор: 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 |
а если преобразовать в полярные координаты, так будет проще посчитать... |
Автор: Alek86 27.12.2007, 10:12 |
там я ошибся по плоскостям 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 | ||||
жаль только, что неясно что в общем случае считать за правильное решение, а что - ха второе правильное решение ![]()
знаю и с рабостью бы воспользовался, но функция, которую хотел использовать, принимает именно эти 3 злдлосчастных вектор ![]() в общем, вопрос не решен, как понимаю, но я уже выпеднрился без этой функции даже не знаю, закрывать тему, или нет.... |