2012-01-26 45 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

相關問題