Расчет координат инерционного тензора твердого тела

Я пытаюсь реализовать физическое моделирование небольшого твердого тела, используя DirectX для рисования моих объектов и его библиотеку Math, чтобы использовать преимущества SIMD-вычислений (классы XMMATRIX и XMVECTOR).

Мой вопрос об инерционном тензоре, я знаю, что с помощью его обратного я могу рассчитать угловое ускорение следующим образом:

AngAcc = Inverse(I) * torque

и этот тензор инерции в локальном пространстве является постоянным... поэтому я храню его обратное в своем классе RigidBody с некоторыми другими членами:

//'W' suffix means 'world space'
//'L' suffix means 'local space'
XMFLOAT3 m_positionW;               //rigid body position
XMFLOAT4 m_orientationW;            //angular orientation
XMFLOAT3 m_velocityW;               //linear velocity
XMFLOAT3 m_rotationW;               //angular velocity (rotation) 

XMFLOAT3X3 m_inverseInertiaTensorL; //inverse of the body inertia tensor in local space (constant)

XMFLOAT4X4 m_worldTransform;        //transform matrix for converting body space into world space
XMFLOAT3X3 m_inverseInertiaTensorW; //inverse of the body inertia tensor in world space (change every frame)

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

Как я могу это сделать?

  1. Я должен умножить m_inverseInertiaTensorL на m_worldTransform? Если да, то как? первый - XMFLOAT3X3, а второй - XMFLOAT4X4...
  2. Я должен использовать ориентацию? Где-то я читаю что-то вроде: "inverseWorldInertiaTensor = rot*inverseBodyInertiaTensor*rot.transpose()", где я думаю, что "rot" - это матрица, подобная этой:

    XMMATRIX вращение = XMMatrixRotationQuaternion(ориентация W);

Я очень смущен... кто-то может мне помочь?

1 ответ

Решение

Я обнаружил, что умножение m_inverseInertiaTensorL на m_worldTransform является правильным способом; необходима только часть вращения m_worldTransform, поэтому вы можете умножить m_inverseInertiaTensorL на 3x3- подматрицу m_worldTransform.

Другие вопросы по тегам