四元數(Quaternions)簡單理解就是一個四維向量 形式以下:bash
q = w+i*x+j*y+k*z = <w,i*x,j*y,k*z>
複製代碼
四元數乘法法則在四元數運算中,是如同實數乘法同樣基礎和重要的運算 形式以下:spa
i^2+j^2+k^2=-1
ij=-ji=k
jk=-kj=i
ki=-ik=j
複製代碼
可見四元數乘法不知足交換律3d
q1 = w1+i*x1+j*y1+k*z1
q2 = w2+i*x2+j*y2+k*z2
q1*q2 =
(w1w2 - x1x2 - y1y2 - z1z2)
+(w1x2 + x1w2 + y1z2 - z1y2)i
+(w1y2 - x1z2 + y1w2 + z1x2)j
+(w1z2 + x1y2 - y1x2 + z1w2)k
複製代碼
q1*q2等號右側的多項式就是根據(w1+i*x1+j*y1+k*z1)*(w2+i*x2+j*y2+k*z2)所得出結果的再加工.code
(w1z2 + x1y2 - y1x2 + z1w2)k
複製代碼
例如上面的多項式中的第三項-y1x2就是經過j*y1*i*x2轉換而來. j*y1*i*x2 = j*i*y1*x2 = -k*y1*x2.cdn
這裏要再次重申: 四元數乘法不知足交換律,ij != ji.blog
基於上面q1*q2的結果,咱們最終得以將四元數乘法轉換成向量形式:string
"*":就是普通乘法
"·":這是內積運算
"X":這是Cross product 運算(百度百科裏面Outer product 和Cross product都有外積的叫法,英文避免歧義)
q = s +v,s爲w,v爲i*x,j*y,k*z
q1*q2 = s1*s2 - v1·v2 + s1*v2 + s2*v1 + v1 X v2
複製代碼
向量形式直觀的告訴了咱們,四元數相乘時發生了什麼,其結果也爲一個四元數,具體解釋詳見文章底部.it
四元數逆運算 q^*爲四元數的共軛io
q^-1 = q^*q^2
q*q^-1 = (q*q^*)/q^2 = q^2/q^2 = 1
q^-1*q = (q^*q*)/q^2 = q^2/q^2 = 1
複製代碼
關於q1*q2的解釋class
爲了簡化條件,設s1=s2=s=1,v1和v2爲平面的基向量
複製代碼
那麼
s1*v2 + s2*v1=v2+v1,其結果就是位於v1與v2之間的一條向量v3
v3 + v1 X v2的結果則爲:
這時v3 + v1 X v2的結果向量就位於由v1,v2,v4所構成的三維空間盒子的相對於原點的最遠點