四元數( Quaternion )的 Inverse 運算
前言
最近發現需要四元數( Quaternion )的 Inverse 運算,發現以前的觀念是錯的,在此把學習的過程做個紀錄。
內容
在我以前的觀念裡,Inverse 運算只要將 X 、 Y 與 Z 乘上 -1 即可,但最近發現這樣算出來會是錯的,在搜尋後找到
[ www.quora.com ]How do I find the inverse of a quaternion? ,在該文中還多做一個步驟,就是 X 、 Y 、 Z 與 W 都還要除以 Magnitude ,所以整個詳細的流程如下
struct Quaternion
{
float x;
float y;
float z;
float w;
};
Quaternion Inverse(Quaternion& quat)
{
Quaternion tagQuat={0};
float magnitude =
( quat.x * quat.x ) +
( quat.y * quat.y ) +
( quat.z * quat.z ) +
( quat.w * quat.w );
if( magnitude == 0.0f)
return tagQuat;
//
tagQuat.x = -quat.x / magnitude;
tagQuat.y = -quat.y / magnitude;
tagQuat.z = -quat.z / magnitude;
tagQuat.w = quat.w / magnitude;
return tagQuat;
}
要注意的是 Magnitude 可能是零,而將 X 、 Y 與 Z 乘上 -1 這個結果稱為 Conjugate。
參考資料
[ www.quora.com ]How do I find the inverse of a quaternion?
沒有留言:
張貼留言