在平時的開發中,經常會遇到旋轉的操作,也因此經常會接觸到四元數的相關概念。但是,這個概念說難不難,但是理解起來也挺費勁的。
我經常會使用到四元數,但是每次使用時都會查資料,當時理解了概念,但是過兩天又忘記了,當再次使用的時候,又要重新查資料。挺蛋疼。於是就寫一篇部落格,關於四元數,算是加強印象。
先放一篇對四元數講解的非常詳細的部落格:
我看過這篇部落格之後,對四元數又作了一些簡要的提煉。下面只描述我 是如何理解四元數的。
四元數的主要作用是用來解決旋轉問題的,因此,我們必須知道兩個條件,乙個是旋轉軸(一般是乙個歸一化向量),乙個是旋轉的角度,還有乙個已知的是我們要旋轉的原始頂點 或者 向量。
這樣問題就轉化成了3個已知數:
p : 要旋轉的源頂點 或者 向量
y:要圍繞其旋轉的旋轉軸(這裡用y來表示是假定我們用y軸來旋轉,易於理解)
θ: 要旋轉的角度
求出 旋轉 之後的 目標 頂點座標 或者 向量
面對這個問題。我們要構造出兩個四元數,乙個四元數與p有關,乙個四元數與y和 θ 有關,其中:
與p有關的四元數是 在p的頂點座標後面直接補乙個0,簡單粗暴,即(p,0)
與y和 θ 有關的四元數也不難, 就是 (y * sin(θ / 2) , cos( θ / 2))
好了,現在我們兩個四元數都構造好了,剩下就是套公式了。也許公式理解起來很頭疼,但是我們可以不用管公式的推倒過程,直接記結果,拿起筆直接算好了:
結果:要求的結果 x = (y * sin(θ / 2) , cos( θ / 2)) * (p,0) * ( -y * sin(θ / 2) , cos( θ / 2))
這是公式,計算出來的結果x其實也是乙個四元數,比如(x,y,z,w),這個四元數前三位的值(x,y,z)即是我們所求的旋轉過後的點 或者 向量 (具體的如何計算這個公式可以看前面部落格提到的那篇博文)
不過好在,目前我們是資訊時代,這些複雜的數學計算就交給計算機去做了。不過它的原理我覺得我們還是有必要去了解的。by the way, 我們平時在用unity的時候也可以用unity提供的api去計算旋轉什麼的。也很方便。
四元數的筆記
四元數 h a bi cj dk 共軛 h a bi cj dk 逆 h frac 所以單位四元數的共軛等於他的逆 單位四元數 絕對值為1的四元數 若實部為cos t 它的共軛作用是乙個角度為2t的轉動,轉軸為虛部的方向。四元數的優點是 只有單位四元數才能表示旋轉,所以在eigen中一般會有quat...
四元數 尤拉角學習筆記 個人理解
i j k三軸定義如上圖所示。滿足右手螺旋定則 複數的乘法 ai bj ck xi yj zk ax i i ay i j az i k bx j i by j j bz j k cx k i cy k j cz k k aa bb c c bz cy i cx az j ay bx z 向量內積 ...
四元數左乘右乘 四元數 尤拉角學習筆記 個人理解
一 背景知識 點乘 叉乘 複數的點乘 ai bj ck xi yj zk ax by cz 複數的叉乘 ai bj ck xi yj zk ax i i ay i j az i k bx j i by j j bz j k cx k i cy k j cz k k ijk三軸定義如上圖所示。滿足右手...