LINUX.ORG.RU

История изменений

Исправление I-Love-Microsoft, (текущая версия) :

Здесь можно почитать про уравнения связывающие угловую скорость и ориентацию.

Почитал книгу, но не до конца, ибо надо внимательно вдумываться в формулы и сравнивать.

Надо по хорошему считать.

Разобрался как применять кватернионы для вращения объекта (смотрю оси и куб в OpenGL - просто делаю glLoadMatrixf для матрицы перемещения объекта, а Qt предоставляет классы для кватерниона).

Сделал так:

vis_gac vd;                                                    
QQuaternion quat;                                              
quat = QQuaternion::fromAxisAndAngle(1, 0, 0, f_xyz[0]) * quat;
quat = QQuaternion::fromAxisAndAngle(0, 1, 0, f_xyz[1]) * quat;
quat = QQuaternion::fromAxisAndAngle(0, 0, 1, f_xyz[2]) * quat;
vd.q = quat;                                                   
vis_data.append(vd);
где fromAxisAndAngle принимает значения в градусах.

Кубик крутится, но в конце всё равно не возвращается в изначальное положение (а должен).

Вопрос: так как же правильно считать? Где конкретно это описано?

Я правильно понимаю, что сам факт того что я раздельно делаю движения по осям - неверно? Что гироскоп дает связанные данные о движении? Как же тогда загрузить это в кватернион? Показания гироскопа задать как вектор, а каков же скаляр?

Прощу прощения, но как было непонятно, пока и остается.

Исправление I-Love-Microsoft, :

Здесь можно почитать про уравнения связывающие угловую скорость и ориентацию.

Почитал книгу, но не до конца, ибо надо внимательно вдумываться в формулы и сравнивать.

Надо по хорошему считать.

Разобрался как применять кватернионы для вращения объекта (смотрю оси и куб в OpenGL - просто делаю glLoadMatrixf для матрицы перемещения объекта, а Qt предоставляет классы для кватерниона).

Сделал так:

vis_gac vd;                                                    
QQuaternion quat;                                              
quat = QQuaternion::fromAxisAndAngle(1, 0, 0, f_xyz[0]) * quat;
quat = QQuaternion::fromAxisAndAngle(0, 1, 0, f_xyz[1]) * quat;
quat = QQuaternion::fromAxisAndAngle(0, 0, 1, f_xyz[2]) * quat;
vd.q = quat;                                                   
vis_data.append(vd);
где fromAxisAndAngle принимает значения в градусах.

Кубик крутится, но в конце всё равно не возвращается в изначальное положение (а должен).

Вопрос: так как же правильно считать? Где конкретно это описано?

Исходная версия I-Love-Microsoft, :

Здесь можно почитать про уравнения связывающие угловую скорость и ориентацию.

Почитал книгу, но не до конца, ибо надо внимательно вдумываться в формулы и сравнивать.

Надо по хорошему считать.

Разобрался как применять кватернионы для вращения объекта (смотрю оси и куб в OpenGL - просто делаю glLoadMatrixf для матрицы перемещения объекта, а Qt предоставляет классы для кватерниона).

Сделал так:

vis_gac vd; QQuaternion quat; quat = QQuaternion::fromAxisAndAngle(1, 0, 0, f_xyz[0]) * quat; quat = QQuaternion::fromAxisAndAngle(0, 1, 0, f_xyz[1]) * quat; quat = QQuaternion::fromAxisAndAngle(0, 0, 1, f_xyz[2]) * quat; vd.q = quat; vis_data.append(vd);

где fromAxisAndAngle принимает значения в градусах.

Кубик крутится, но в конце всё равно не возвращается в изначальное положение (а должен).

Вопрос: так как же правильно считать? Где конкретно это описано?