為什麼實際旋轉角度是四元數裡面的角度的兩倍?有什麼數學上的原因嗎?

不明白為什麼實際旋轉的角度是正弦函數與餘弦函數裡面的角度的兩倍?
請問誰能解釋一下嗎?
最好從比較高級的數學知識角度解釋一下
【Unity技巧】四元數(Quaternion)和旋轉


為了稍微系統一點地回答這個問題,也為了整理一下關於四元數的知識,這篇回答分為七個(不均等的)部分:複數與旋轉、四元數的定義、四元數的性質、等距同構、虛四元數的乘積、四元數的共軛作用、共軛作用的效果。

開始了!

一、複數與旋轉

在說四元數與旋轉的關係之前,我們先回顧一下複數與旋轉的關係:

每一個mathbb{R}^{2}(關於原點)的旋轉都可以用一個複數z_{	heta}=cos	heta+isin	heta來表示。這是因為,對於每一個點(x,y)=x+iy來說:

z_{	heta}(x+iy)=(cos	heta+isin	heta)(x+iy)=xcos	heta-ysin	heta+i(xsin	heta+ycos	heta)

所以z_{	heta}(x,y)移到了(xcos	heta-ysin	heta,xsin	heta+ycos	heta)的位置,也就是旋轉了	heta.

我們還可以把這個過程寫成矩陣形式:

為了更好地看出複數與矩陣的聯繫,我們可以把矩陣寫成這樣的形式:

其中,

(順帶說一句,Bourbaki給法國中學生寫的課本中,虛數就是直接這麼定義的。)

於是,我們可以把每個複數都表示成矩陣的形式:

當我們把複數與矩陣結合起來的時候,我們就多了一種描述『和』與『積』等運算的角度。

二、四元數的定義

對於四元數來說,這種『矩陣表示』的方法同樣適用。

每一個四元數q對應了一個矩陣:

(這並不是四元數與矩陣的唯一對應方法,但這種方法是複數與矩陣對應的推廣。)

【能不寫矩陣形式嗎?】

好吧,把四元數寫成更喜聞樂見的形式就是這樣的:

其中,

所以四元數就是在複數的基礎上又加了mathrm{j,k},並且同樣地mathrm{j}^2=mathrm{k}^2=-1,此外還有運演算法則:

mathrm{ij=k},~mathrm{jk=i},~mathrm{ki=j}

mathrm{ji=-k},~mathrm{kj=-i},~mathrm{ik=-j}

這些可以通過矩陣乘法來驗證。(注意,四元數並不滿足乘法交換律!)

我們把四元數空間記作mathbb{H},以紀念其發現者Hamilton。

三、四元數的性質

四元數的很多性質與複數類似,比如:

每一個非零的四元數q都有逆q^{-1},也就是其對應矩陣的逆矩陣。並且有:

每個四元數q都有與其共軛的四元數ar{q} =a1-bmathrm{i}-cmathrm{j}-dmathrm{k},並且qar{q}=|q|^2. 其中,qar{q}對應的矩陣則是共軛轉置的關係。

定義|q|^{2}=det q=a^{2}+b^{2}+c^{2}+d^{2},所以|q|就是(a,b,c,d)in mathbb{R}^{4}到原點的距離。

正如單位長度的複數對應了圓(一維球面mathbb{S}^{1})一樣,單位長度的四元數滿足a^2+b^2+c^2+d^2=1,對應了三維球面mathbb{S}^{3}.

由於任意兩個單位長度的四元數的乘積仍然是單位長度,所以mathbb{S}^{3}對乘法是封閉的。(實際上,mathbb{S}^{3}在四元數乘法下是一個群。)

四、等距同構

我們現在回過頭再看複數與旋轉的關係:

對於單位長度的複數u來說,我們壓根不需要計算三角函數就可以知道它對應了旋轉。對於任意v,w兩個複數,我們考慮它們的距離在乘u前後的變化:

|uv-uw|=|u(v-w)|=|u||v-w|=|v-w|

可以看出,它們的距離沒有發生變化。用一個看起來高大上的術語來說,『乘u』是一個『等距同構』。

同樣地,我們我們可以用這種方法證明:乘上一個單位長度的四元數也是mathbb{R}^4中的等距同構。

五、虛四元數的乘積

四元數對應了四維空間,而我們要研究的是三維空間的旋轉,所以我們把目光限定在四元數的一個子空間:『虛四元數』。

虛四元數就是實部為零的四元數,也就是形如p=bmathrm{i}+cmathrm{j}+dmathrm{k}的四元數。虛四元數構成了三維的空間,我們把它記作mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}.

顯然,mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}中任意兩個元素的和還是在mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}中;然而當我們做乘法的時候,問題就出現了:

如果u=u_1mathrm{i}+u_2mathrm{j}+u_3mathrm{k},~v=v_1mathrm{i}+v_2mathrm{j}+v_3mathrm{k},那麼它們的乘積是:

uv=-(u_1v_1+u_2v_2+u_3v_3)
~~~~+(u_2v_3-u_3v_2)mathrm{i}-(u_1v_3-u_3v_1)mathrm{j}+(u_1v_2-u_2v_1)mathrm{k}

或者寫成

uv=-ucdot v+u	imes v

由於ucdot v是實數,所以只有當uv垂直時,uv才在mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}中。

同時,注意到如果umathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}中的單位向量,那麼u^2=-ucdot u=-|u|^2=-1.

六、四元數的共軛作用

現在我們試著用四元數表示三維空間mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}中的旋轉。

與複數一樣,對於一個單位長度的四元數t,我們也可以把它寫成實部與虛部的和:

t=cos	heta+usin	heta, 其中umathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}中的單位向量。

我們希望把mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}作為我們旋轉的空間,然而我們之前已經發現,對於qin mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}來說,qt可能不在mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}之中。這怎麼辦呢?

答案是:共軛——t^{-1}qt一定在mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}之中。

為什麼呢?首先我們注意到t^{-1}=ar{t}/|t|^2=cos	heta-usin	heta,所以t^{-1}存在。於是,在mathbb{H}中,乘t與乘t^{-1}都是mathbb{H}上的雙射(因為可逆),所以q
ightarrow t^{-1}qt(稱為t的共軛作用)也是mathbb{H}上的雙射。

由於對於任意實(四元)數r都有t^{-1}rt=r,即t的共軛作用把mathbb{R}映到其自身,於是也會把mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}映到自身。也就是說,t的共軛作用是mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}上的雙射,這就解決了之前『qt乘積會跑到mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}之外』的問題。

好的,接下來我們可以具體來考察t的共軛作用在三維空間mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}中的效果了。

七、共軛作用的效果

我們想要證明的是,給定t=cos	heta+usin	heta,其中umathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}中的單位向量,那麼t的共軛作用將把mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}繞著u所在的軸mathbb{R}u旋轉2	heta.

證明分兩步,首先我們證明mathbb{R}u是旋轉軸。這也就意味著,我們要證明u的所有實數倍的向量在t的共軛作用下保持原位:

t^{-1}ut=(cos	heta-usin	heta)u(cos	heta+usin	heta)
=(ucos	heta-u^2sin	heta)(cos	heta+usin	heta)
=(ucos	heta+sin	heta)(cos	heta+usin	heta) (因為u^2=-1
=u(cos^2	heta+sin^2	heta)+sin	hetacos	heta+u^2sin	hetacos	heta
=u (因為u^2=-1

接下來,我們在mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}中選取垂直於u的單位向量v,令w=u	imes v. 於是,left{ u,v,w 
ight} mathbb{R}mathrm{i}+mathbb{R}mathrm{j}+mathbb{R}mathrm{k}的一組規範正交基。

為了證明確實旋轉了2	heta,我們只需要證明t^{-1}vt=vcos2	heta-wsin2	heta以及t^{-1}wt=vsin2	heta+wcos2	heta就好了。兩者證明類似,這裡只證明前者:

t^{-1}vt=(cos	heta-usin	heta)v(cos	heta+usin	heta)
=(vcos	heta-uvsin	heta)(cos	heta+usin	heta)
=vcos^2	heta-uvsin	hetacos	heta+vusin	hetacos	heta-uvusin^2	heta
=vcos^2	heta-2uvsin	hetacos	heta+u^2vsin^2	heta (因為vu=-uv
=v(cos^2	heta-sin^2	heta)-2wsin	hetacos	heta (因為u^2=-1,~uv=w
=vcos2	heta-wsin2	heta

證明完畢!

於是,對於mathbb{R}^3中每一個旋轉,給定旋轉軸u以及旋轉角alpha,都有一個單位長度的四元數t=cos(alpha/2)+usin(alpha/2)的共軛作用與之對應。

此外,注意到兩個旋轉的疊加仍然是一個旋轉,因為t_{2}^{-1}(t_{1}^{-1}qt_1)t_2=(t_{2}^{-1}t_{1}^{-1})q(t_1t_2)=t^{-1}qt;以及,旋轉的逆也是一個旋轉。

同時,由於(-t)^{-1}s(-t)=t^{-1}st,於是-t對應了同一個旋轉,所以這是一個『二對一』的對應關係,也就是其他答主所說的『從Spin群到SO群的二重覆蓋映射』。

那麼就這樣=w=

參考資料:

(譯為《天真的謊言理論》或《樸素李理論》)


因為這裡實際用到的是一個Spin群到SO群的覆蓋映射. 而眾所周知這個覆蓋是二重覆蓋, 所以這裡有個2的因子.
具體的說, 我們選取一個一個角度和轉軸, 相當於選取一個李代數中的元素, 將其轉換為一個旋轉, 相當於做了一個從李代數到李群的Exp映射. 由於Exp映射是一個函子, 可以得到一個交換圖
egin{matrix}
mathrm{Spin}(3)  overset{xi}{
ightarrow}  mathrm{SO}(3) \
uparrow   uparrow\
mathfrak{spin}(3) overset{xi^prime}
ightarrow  mathfrak{so}(3)
end{matrix}
其中兩個垂直箭頭代表Exp映射, 注意xi是二對一映射, xi^prime是線性映射, 可以發現乘以2是xi^prime的一個很自然的選擇(需要證明). 綜上, 我們在mathfrak{spin}(3)選了個元素, 對應是兩倍角的旋轉.


這個結果最初應該是猜出來的,之後才有了進一步的更高級的解釋。

其推導過程倒不難。
將四元數視為mathbb{R}	imesmathbb{R}^3,即實部為一個標量,虛部為一個三維歐氏空間矢量,一個四元數可表示為q=[s,oldsymbol{v}]=s+oldsymbol{v}=s+x_voldsymbol{i}+y_voldsymbol{j}+z_voldsymbol{k}。然後,我們像複數那樣定義相關的運算(加法,乘法,共軛,模):
egin{eqnarray*}
p + q = [s_p + s_q, oldsymbol{v}_p + oldsymbol{v}_q] \
pq = [s_p,oldsymbol{v}_p][s_q,oldsymbol{v}_q] = [s_ps_q-oldsymbol{v}_pcdotoldsymbol{v}_q, s_poldsymbol{v}_q+s_qoldsymbol{v}_p+oldsymbol{v}_p	imesoldsymbol{v}_q] \
ar p = [s_p, -oldsymbol{v}_p] \
|q| =  |[s,oldsymbol{v}]| = sqrt{s^2 + |oldsymbol{v}|^2}
end{eqnarray*}
和複數相類比,四元數也可表示為輻角的形式,令r=|q|,cos	heta=frac{s}{r},則
q = r(cos	heta[1,mathbf{0}] + hat{oldsymbol{v}}sin	heta) = r(cos	heta + hat{oldsymbol{v}}sin	heta)
其中
hat{oldsymbol v} = frac{1}{|oldsymbol v|}[0,oldsymbol v]
而且它滿足hat{oldsymbol{v}}hat{oldsymbol{v}}=-1,看起來就和複數虛單位一樣 (但是,它依賴於四元數本身)。不過,我們還是可得到一個輻角形式
q = [s,oldsymbol v] = r(cos	heta + hat{oldsymbol  v}sin	heta) = re^{hat{oldsymbol v}	heta}
我們知道,複數的輻角形式可以用來算複數的乘法,但四元數不能這麼干,因為四元數的"虛單位"依賴於四元數本身。不過,我們卻可以用它來做旋轉。假設有一個旋轉方向oldsymbol{n}和旋轉角度	heta,被旋轉點為oldsymbol{p},於是我們可將它們表示為兩個四元數
egin{align*}
q = e^{hat{oldsymbol{n}}	heta} \
p = [0,oldsymbol{p}] 
end{align*}
其中hat{oldsymbol{n}} = [0,frac{1}{|oldsymbol{n}|}oldsymbol{n}] 。然後,我們就可以看一看乘法pq是多少,不巧的是,pq的實部不為零,旋轉前實部為零,旋轉後當然也要為零。兩邊各乘一個呢:qpq^{-1},這回實部為零,但是得到的結果是
qpq^{-1}=[0, (hat{oldsymbol{n}}oldsymbol{p}(1-cos2	heta))hat{oldsymbol{p}}+cos2	hetaoldsymbol{p}+sin2	heta(hat{oldsymbol{n}}	imesoldsymbol{p})]
而旋轉的公式應該為
(hat{oldsymbol{n}}oldsymbol{p}(1-cos	heta))hat{oldsymbol{p}}+cos	hetaoldsymbol{p}+sin	heta(hat{oldsymbol{n}}	imesoldsymbol{p})
這點可用解析幾何方法來驗證

總之,我們得到一個轉子(rotor)
q=e^{hat{oldsymbol{n}}	heta/2}
而旋轉公式為
qpar q
至於轉子中的1/2的本質, @狄拉克運算元 提到了二重覆蓋,就不多說了。參考文獻:
1. Quaternions for Computer Graphics by John Vince.
2. Geometric Algebra for Physicists by Doran Lasenby


因為單位四元數構成了一個SU2群。
這個群 等同於 三維空間旋轉群 SO3 和一個 2階循環群的 「積」

為了讓SU2群可以表示SO3群。 所以加個除以2 。 這個2就是這個 2階素數循環群的 元素個數。


看這本書《慣性導航》秦永元,第九章,其實是一個餘弦定理。


瀉藥
看到前面的答主回答的都很好,我就說一個從其他方面理解的方法。
我們可以證明對於哈密頓四元數中的虛數張成的線性空間的旋轉群同構於SU(2)。
然後SU(2)是單連通(同構於三維球面)
SO(3)是雙連通(同構於同一條直徑與球面兩交點視為同一點的三維單位球)
所以SU(2)到SO(3)的同態肯定是雙重覆蓋。


推薦閱讀:

數學競賽是體育嗎?
怎麼證明一條直線上兩人從兩點相對而行一定會相遇?
把12345678這幾個數字不重複地填入 ()-()=1, ()+()=9, ()-()=2, ()+()=7 這幾個式子的括弧中,有解嗎?
無窮大必無界,但反之不真?

TAG:數學 | 趣味數學 | 四元數 | 高等數學 | 向量 |