0

所以,我正在将一些 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;
4

2 回答 2

7

根据这个链接,就像你说的(也在四元数系统中):

inline D3DXQUATERNION& D3DXQUATERNION::operator *= (FLOAT f)
{
    x *= f;
    y *= f;
    z *= f;
    w *= f;
    return *this;
}
于 2012-01-26T23:55:12.233 回答
0

这是一个非常古老的问题,但我可以从已发布的来源验证这一点:Vince 2011 - Quaternion for Computer Graphics,第 57-58 页。

以更简单的形式:

q = [s, v] where s \in R and v \in R^3
\lambda q = [\lambda s, \lambda v] where \lambda \in R

在更复杂的符号中:


q = a + bi + cj + dk

q * s = s * a + bi * s + cj * s + dk * s
      = s * a + (b * s)i + (c * s)j + (d * s)k

在javascript中


let quat = [0.4, 0.3, 0.7, 0.1];

function quaternion_scalar_multiplication(quat, s){
    quat[0] *= s;
    quat[1] *= s;
    quat[2] *= s;
    quat[3] *= s;
    return quat;
}

于 2021-06-09T01:04:59.943 回答