四元數(shù)是一個(gè)復(fù)數(shù),下面就一步一步講解下復(fù)數(shù)怎么和坐標(biāo)系旋轉(zhuǎn)勾搭上的!
在網(wǎng)上查了一些資料,對(duì)于四元數(shù)的講解基本上沒(méi)有讓我滿意的,可能是我水平不夠或者思路跟不上!所以我打算自己總結(jié)一篇淺顯易懂有不漏知識(shí)點(diǎn)的四元數(shù)淺析文章!
首先四元數(shù)是一個(gè)復(fù)數(shù),什么是復(fù)數(shù)?應(yīng)該初中還是高中的數(shù)學(xué)肯定是學(xué)過(guò)的,估計(jì)大部分人都還給老師了! 復(fù)數(shù)1、概述一下復(fù)數(shù) 任意一個(gè)復(fù)數(shù)z都可以表示為z=a+bi 的形式.我們將a稱(chēng)之為這個(gè)復(fù)數(shù)的實(shí)部,b稱(chēng)之為這個(gè)復(fù)數(shù)的虛部。 其中i的平方等于-1!怪不怪!我理解的復(fù)數(shù)的發(fā)明就是為了讓它的虛部也能參與運(yùn)算,因?yàn)閿?shù)學(xué)里有的地方會(huì)出現(xiàn)i平方等于-1的情況,如果沒(méi)發(fā)明復(fù)數(shù),那么就無(wú)法完成計(jì)算! 復(fù)數(shù)的模長(zhǎng)|z|; ![]() 模長(zhǎng)
復(fù)數(shù)參與運(yùn)算主要靠上面這幾個(gè)關(guān)系互相轉(zhuǎn)換,算到最后可以把虛數(shù)算沒(méi)了,就像個(gè)中間變量一樣;兔死狗烹,鳥(niǎo)盡弓藏! 2、復(fù)數(shù)怎么和旋轉(zhuǎn)矩陣勾搭上的? 推導(dǎo) 首先寫(xiě)z1=a+bi,z2=c+di兩個(gè)復(fù)數(shù);
由于i平方等于-1;進(jìn)而化簡(jiǎn):
再化簡(jiǎn):
寫(xiě)成矩陣形式 ![]() 右側(cè)的矩陣c d;就是用向量的形式表示z2;為啥呢?因?yàn)閺?fù)數(shù)可以圖像化表示,復(fù)數(shù)z=a+bi可以用如下圖表示: ![]() 既然右側(cè)的列矩陣c d 表示z2,那么復(fù)數(shù)z1就是左側(cè)的二維矩陣表示的!進(jìn)而可以推斷出z2的二維矩陣形式; 最終得出,z1*z2就是兩個(gè)二維矩陣相乘,如下圖公式: ![]() 上面的式子里面i不見(jiàn)了,我們就是當(dāng)i=1;或者讓矩陣乘以一個(gè)二維矩陣,但是結(jié)果不變,那么這個(gè)矩陣就是如下形式,得出i的二維矩陣形式,后面會(huì)用到這個(gè)i矩陣: ![]() 以上這些公式就可以和旋轉(zhuǎn)矩陣眉目傳情有點(diǎn)關(guān)系了;下面繼續(xù)推導(dǎo),把復(fù)數(shù)z1的矩陣形式再變換一下,就徹底勾搭上了,如下: ![]() 配合下面這個(gè)圖看一下,就知道為啥徹底勾搭上了: ![]() 這不就是三角函數(shù)嗎! 那么上面的公式就可以寫(xiě)成三角函數(shù)的形式了,加上求模的公式,再加上上面得出的i二維矩陣,最終可以把公式寫(xiě)成如下形式: ![]() 右邊的矩陣就是二維里面的旋轉(zhuǎn)矩陣了; 左邊的其實(shí)就是縮放矩陣; 驗(yàn)證 實(shí)驗(yàn)一下我們將一個(gè)點(diǎn)坐標(biāo) (1,0),旋轉(zhuǎn)θ角度,帶入上面這個(gè)公式,最終得到如下; ![]() 就是對(duì)點(diǎn)(1,0)逆時(shí)針旋轉(zhuǎn)了θ角度,然后再縮放|z|倍;同理代入點(diǎn)(1,0)也是一樣的原理,如下圖顯示兩個(gè)點(diǎn)的旋轉(zhuǎn)圖; ![]() 如果復(fù)數(shù)的模為1,那么就只剩旋轉(zhuǎn)矩陣了! 總結(jié)一下: 如果(模)等于1,復(fù)數(shù)z可以寫(xiě)成如下矩陣形式: ![]() 寫(xiě)成復(fù)數(shù)形式就是:
對(duì)比下 :
如此,復(fù)數(shù)和旋轉(zhuǎn)矩陣的關(guān)系大家應(yīng)該知曉了! 數(shù)學(xué)真好玩,把兩個(gè)不相關(guān)的東西硬是緊密的勾搭到了一起,佩服! 單位四元數(shù)(模為1)概述
標(biāo)準(zhǔn)里我們把四元數(shù)表示為:
應(yīng)用 單位四元數(shù)的復(fù)數(shù)形式怎么和3D旋轉(zhuǎn)扯上關(guān)系,推理方法和上面復(fù)數(shù)推理2D旋轉(zhuǎn)矩陣一樣,就不詳細(xì)講了,下面我們直接使用它,用matlab寫(xiě)程序案例,直接到應(yīng)用層次! 直接調(diào)用函數(shù)UnitQuaternion,下面的0.1、0.2、0.3表示繞x繞y繞z旋轉(zhuǎn); >> q = UnitQuaternion( rpy2tr(0.1, 0.2, 0.3) ) q = 0.98335 < 0.034271, 0.10602, 0.14357 > 用q.R可以輸出旋轉(zhuǎn)矩陣: >> q.R ans = 0.7536 -0.4993 0.4275 0.5555 0.8315 -0.0081 -0.3514 0.2436 0.9040 輸出圖形如下: >> q.plot() ![]() 以上就是四元數(shù)的簡(jiǎn)單介紹,第一部分主要讓大家搞懂四元數(shù)怎么能表示旋轉(zhuǎn)的,第二部分就是簡(jiǎn)單的應(yīng)用了,可以看出應(yīng)用非常簡(jiǎn)單,如果實(shí)際寫(xiě)應(yīng)用程序,四元數(shù)法會(huì)簡(jiǎn)單明了,節(jié)省時(shí)間,也可以讓程序更流暢! |
|
來(lái)自: taotao_2016 > 《視覺(jué)》