Матрица вращения в углы Эйлера

0

Я использую следующий код для преобразования матрицы вращения 3X3 в углы:

(_r = double [9])

double angleZ=atan2(_r[3], _r[4])* (float) (180.0 / CV_PI);
double angleX=180-asin(-1*_r[5])* (float) (180.0 / CV_PI);
double angleY=180-atan2(_r[2],_r[8])* (float) (180.0 / CV_PI);

вот маленький помощник

_r[0] _r[1] _r[2]
_r[3] _r[4] _r[5]
_r[6] _r[7] _r[8]

Есть ли в этом смысл? потому что углы кажутся слишком... взаимозависимыми? xyz все реагируют на изменение одной позы...

матрица поворота принимается из функции opvv cvPOSIT, поэтому точки интереса могут быть ошибочными и давать этот запутанный эффект...

но почему-то я думаю, что я просто делаю неправильное преобразование :)

Я применяю углы в opengl к кубу:

glRotatef(angleX,1.0f,0.0f,0.0f);
glRotatef(angleY,0.0f,1.0f,0.0f);
glRotatef(angleZ,0.0f,0.0f,1.0f);
  • 1
    Возможно, это может быть полезно: soi.city.ac.uk/~sbbh653/publications/euler.pdf
  • 0
    ааа еще греческие буквы и матрицы: D
Показать ещё 2 комментария
Теги:
opencv
matrix
3d
rotational-matrices

1 ответ

4
Лучший ответ

То, что вы пытаетесь выполнить, не так просто, как вы могли бы подумать. Существует несколько соглашений относительно того, какие углы эйлеров называются (x, y, z, alpha, beta, gamma, yaw, pitch, roll, heading, elevation, bank,...) и в каком порядке они должны применяться,

Также есть некоторые проблемы с двусмысленностями в определенных позициях, см. Статью Wikpedia о Gimbal Lock.

Пожалуйста, прочитайте документ Эйлера Угол Формулы Дэвида Эберли. Это очень полезно и включает в себя множество формул для различных конвенций, и вы, вероятно, должны основывать свой код на них, если хотите иметь стабильные формулы даже в угловых случаях.

  • 0
    у этого есть псевдокод, но я чувствую, что я уже попробовал это ... но 1+ и я попробую снова. Жаль, что я сосу математику
  • 0
    хотя я использую свою формулу, так как она также работает (imho даже лучше), я принимаю это, потому что этот PDF - отличный ресурс для всех, кто ищет ответ;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню