2012-01-26 47 views
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] 

是这样的标量操作四舍五入?0.5f?

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

回答

6

this link,这就像你说的(并且在四元数系统还):

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

我觉得这没有切中要害。如果你正在处理一个代表旋转的四元数,那么只有一个四元数是有效的。这样的缩放不会导致除1.0以外的任何比例的单位四元数。虽然这可能是标题中的实际操作员,但不会产生缩放旋转。 – Jherico 2015-10-23 19:59:47

+0

@Jherico:我没有明白你的观点:问题显然是关于标量的乘法,而不是旋转的缩放。 – Karolos 2015-10-26 17:11:31

+0

我想我的观点是,他几乎肯定会问错误的问题,并且原始的C++代码可能不正确,如果他想要做的是应用缩放的角速度,或者将角速度转换为旋转乘以时间因子。 – Jherico 2015-10-26 19:59:20

相关问题