Получение оси вращения в osgSim :: DOFTransform?

#c #openscenegraph

#c #openscenegraph

Вопрос:

Я работаю над моделью OSG, которая содержит несколько узлов DOFTransform. Для выполнения геометрических вычислений на 3D-модели мне нужно знать, какая ось вращения и точка, в которой расположена эта ось, возможно ли это?

Ответ №1:

osgSim ::DOFTransform http://trac.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00215.html

имеет

 const osg::Vec3amp; osgSim::DOFTransform::getCurrentHPR() const;
  

чтобы получить углы Эйлера для ** H ** eading, ** P ** itch и ** R ** oll, и

 MultOrder osgSim::DOFTransform::getHPRMultOrder() const;
  

чтобы получить соглашение, предназначенное для использования для последовательности поворотов.

Опорная точка может быть определена с помощью

 const osg::Vec3amp; osgSim::DOFTransform::getCurrentTranslate () const;
  

Учитывая вектор v, выраженный в координатах кадра, на который ссылается перевод t, это

v’ = vt

к которому должны быть применены вращения.


Для преобразования угла Эйлера в представление оси / угла, пожалуйста. принять участие:

https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Conversion_formulae_between_formalisms

Кроме того:

Пусть M — объединенная матрица вращения, например

M = H * P * R

(H, P, R здесь обозначают соответствующие матрицы для заданных углов) и векторы v ‘, с

= M * v’

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