@olkeyn

Физика пружины. Как узнать момент вращения через кватернион?

Здравствуйте. Пишу симуляцию пружины при помощи ODE и Panda3D для визуализации. С простым движением всё просто: прикладывается сила пропорционально расстоянию, вычитается сила пропорционально скорости и тело плавно возвращается в заданную точку. Если пропорционально скорости не вычитывать, тело совершает гармонические колебания в окрестностях заданной точки. С вращением и моментом полное... Ни матрицы вращения, ни их производные, ни их арккосинусы и арксинусы не дают результата. В лучшем случае тело раскручивается вокруг 0Z, в худшем совершает случайные вращения и улетает в космос. Держаться заданного угла не хочет ни в какую.

Самая успешная реализация вращения у меня пока учитывает вращение только по 0X и 0Y. У тела получаем квартернион и прикладываем момент пропорционально X или Y. Само собой любое отклонение вокруг оси Z влечёт раскручивание и полёт в космос. Если тело вокруг Z не вращается, тело успешно держит заданный угол при прикладывании внешних сил.

Как рассчитать момент, необходимый для поворота в направлении заданном кватернионом, чтобы тело придерживалось заданного угла?
  • Вопрос задан
  • 3488 просмотров
Пригласить эксперта
Ответы на вопрос 3
EndUser
@EndUser
Вы имеете в виду тензор инерции? Это не кватернион.
Штука заковыристая (пока разбираешься), но по сути совершенно аналогична линейной механике: как вы получаете вектор ускорения делением вектора силы на инерцию, так же точно вы получаете вектор углового ускорения делением вектора момента силы на тензор инерции. И никаких левых дёрганий не получится - сама мать природа позаботится (при правильном оформлении тензора инерции, разумеется).
Ответ написан
@lookid
Дэвид Барафф в своём курсе лекций описывает это всё дело:
www.cs.cmu.edu/~baraff/sigcourse/notesd1.pdf
Момент инерции это диагональная матрица, которая задается в момент создания тела. Это этакая "масса" для вращательного движения.
Ответ написан
@olkeyn Автор вопроса
По идее мне просто нужно узнать, какой угол кватернион образует с координатными осями. Только как это сделать?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы