Как применить скалярное умножение к кватерниону - PullRequest
0 голосов
/ 27 января 2012

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

 //Here's the c++ version
 D3DXQUATERNION Qvel = 0.5f * otherQuat* D3DXQUATERNION(angVel.x, angVel.y, angVel.z, 0);


 //Here's the js quat multiplication
   function quat_mul(q1, q2) {            
   return 
    [q1.x * q2.w + q1.y * q2.z - q1.z * q2.y + q1.w * q2.x,
    -q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y,
     q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z,
    -q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + q1.w * q2.w]

Является ли скалярная операция quat * 0.5f такой же?

     quat.x *= .5;
     quat.y *= .5;
     quat.z *= .5;
     quat.w *= .5;

1 Ответ

6 голосов
/ 27 января 2012

Согласно этой ссылке , это как вы говорите (а также в системе кватернионных чисел):

inline D3DXQUATERNION& D3DXQUATERNION::operator *= (FLOAT f)
{
    x *= f;
    y *= f;
    z *= f;
    w *= f;
    return *this;
}
...