程式中的四元數表示法

2022-02-19 11:56:48 字數 1046 閱讀 4416

某位的部落格

但當你看完這些後。再看著下面這樣的**,你能快速回過神來麼?

class     cquaternion

void fromaxisangle (const vector3& raxis, const f32 angle)

private:

float mscalar;

float mvector;

} class cmatrix44

; void quaterniontomatrix(const cquaternion& q)

//忽略其它無關緊要的

//、、、、、、、

}; 不用多說,肯定有回過神來的,也有沒有回過神來的。

正如上面那某位的部落格裡面講到的。

對於旋轉軸a,繞其旋轉一定的角度,則可以表示為

x = s * xa

y = s * xb

z = s * xc

w = cos(θ/2)

s = sin(θ/2)

這正是我們fromaxisangle 所做的事情。

而quaterniontomatrix則是對應了

我想說明的是,數學庫本身並不在於**。而是在於數學公式,**僅是將其用另一種符號表示出來而已。只要仔細去看,定能明白其中的道理。

另外,程式設計中還經常用到尤拉角和矩陣的轉換。

這三個的特點。

矩陣運算的資料相對來說比較直觀,容易除錯和診斷。但資料儲存量大,特別是旋轉的時候,會浪費很多空間。

尤拉角儲存小,但有萬向鎖,並且插值不夠平滑。

四元資料量介於二者之間。但插值容易。

在骨骼動畫中,可以在檔案中儲存尤拉角,載入後將旋轉資料轉換為四元數。最後動畫計算時統一採用矩陣運算。

要說的東西很多,一言難盡。今天就到這裡吧。

四元數筆記(3) 軸角表示法與四元數表示的區別

在不了解四元數時,很多人都錯誤的把軸角表示法當成了四元數。軸角表示法 使用乙個3維向量表示轉軸,使用乙個角度分量表示繞該軸的旋轉角度,即 x,y,z,angle 軸角表示法避免了gimbal lock問題,但是!它卻不適合用來做插值,因為用它得到的插值結果會導致插值不平滑,甚至產生跳躍,這一點與尤拉...

計算機中負數表示法

問乙個基本的問題。負數在計算機中如何表示?舉例來說,8在計算機中表示為二進位制的 1000 那麼 8 怎麼表示呢?很容易想到,可以將乙個二進位制位 bit 專門規定為符號位,它等於 0時就表示正數,等於 1時就表示負數。比如,在 8位機中,規定每個位元組的最高位為符號位。那麼,8就是 0000100...

四元數表示三維旋轉的數學原理

之前在畢設裡做過的一些理論分析,我想並非全無意義,這邊羅列下來 hamilton 在 1843 年經過了長達十多年的思考,試圖將複數歸納為三維,在此過程中發現了四元數。利用三個複數來構造四維空間。正如在三維空間內去表述二維的旋轉是十分容易的,以此類推,在四維空間中去表述三維的旋轉要容易和簡便的多。事...