關(guān)于在坐標(biāo)系中旋轉(zhuǎn)平移物體的理論基礎(chǔ)解析
寫在前面
前幾日固體物理老師講了一大堆關(guān)于坐標(biāo)變換的內(nèi)容,聽的也是稀里糊涂恕稠。又和同學(xué)討論了一下如果一個(gè)物體圍繞坐標(biāo)系中任意軸進(jìn)行旋轉(zhuǎn)舵抹,那么該如何計(jì)算其的旋轉(zhuǎn)矩陣瑞妇?于是思考了一會(huì)我就想出了一個(gè)自認(rèn)為比較完善的方法宦棺,那就是將一個(gè)復(fù)雜的旋轉(zhuǎn)操作拆分成幾步基礎(chǔ)旋轉(zhuǎn)操作沾鳄,然后依次寫出旋轉(zhuǎn)矩陣后按照順序相乘即可。
其實(shí)這也是一種比較常見的做法响疚,但因?yàn)槭亲约禾剿鞯降谋尚牛跃蛯?duì)此比較上心,為了能夠?qū)⑵浔憩F(xiàn)得更加形象直觀忿晕,我也決定利用MATLAB和Python將其實(shí)現(xiàn)装诡。
旋轉(zhuǎn)矩陣的理論解釋
因?yàn)檫@一段公式可能會(huì)比較多,所以我就直接放截圖了践盼,這樣子也比較方便鸦采。
以上我們得到了三個(gè)旋轉(zhuǎn)矩陣,分別是繞x軸旋轉(zhuǎn)咕幻,繞y軸旋轉(zhuǎn)渔伯,繞z軸旋轉(zhuǎn),下面我們開始定義操作肄程。
定義旋轉(zhuǎn)操作
旋轉(zhuǎn)單次
我們定義:
- 繞x軸旋轉(zhuǎn)為操作A;
- 繞y軸旋轉(zhuǎn)為操作B;
- 繞z軸旋轉(zhuǎn)為操作C锣吼。
如果一個(gè)物體R想要繞x軸旋轉(zhuǎn)t角度,得到一個(gè)新的物體位置R'蓝厌,我們可以寫為
R' = A(t)R
其中R與R'就是坐標(biāo)向量玄叠,A與R之間是向量乘法,A(t)代表的是繞x軸轉(zhuǎn)角度t拓提。
當(dāng)然读恃,一個(gè)物體不可能只有一個(gè)坐標(biāo)點(diǎn),如果存在多個(gè)坐標(biāo)點(diǎn)R1,R2,R3代态,那么就一一乘上A(t)即可寺惫,也就是R1'=A(t)R1, R2'=A(t)R2, R3'=A(t)R3,最后得到新的物體的三個(gè)坐標(biāo)點(diǎn)R1', R2', R3'蹦疑。
連續(xù)多次旋轉(zhuǎn)
如果我們想讓這個(gè)物體首先繞x軸旋轉(zhuǎn)角度t1西雀,然后再繞y軸旋轉(zhuǎn)角度t2,再繞z軸旋轉(zhuǎn)角度t3必尼,那么我們?cè)撛趺磳懀?/p>
我們一步一步看蒋搜,首先是繞x軸旋轉(zhuǎn)角度t1篡撵,公式為R'=A(t1)R判莉。此時(shí)旋轉(zhuǎn)后的物體的坐標(biāo)是R'。
然后是繞y軸旋轉(zhuǎn)角度t2育谬,公式為R''=B(t2)R'券盅。此時(shí)旋轉(zhuǎn)后的物體的坐標(biāo)是R''。
最后是繞z軸旋轉(zhuǎn)角度r3膛檀,公式為R'''=C(t3)R''锰镀。此時(shí)旋轉(zhuǎn)后的物體的坐標(biāo)是R'''娘侍。
也就是說后一個(gè)操作是對(duì)當(dāng)前物體的坐標(biāo)進(jìn)行操作。
那么我們兩個(gè)兩個(gè)看泳炉,聯(lián)立前兩個(gè)憾筏,先繞x軸t1角度再繞y軸t2角度,公式為R''=B(t2)R'=B(t2)A(t1)R花鹅。從公式中看這兩步操作實(shí)際上是對(duì)R乘了兩個(gè)矩陣B(t2)和A(t1)氧腰,這樣就變成了R''。
注意刨肃,操作按照先后次序古拴,右邊的矩陣為先操作,左邊的矩陣為后操作真友。
那么同理我們可以得到旋轉(zhuǎn)三次后的坐標(biāo)R'''=C(t3)B(t2)A(t1)R黄痪。
同理,如果存在多次操作盔然,我們只需要按照順序不斷的左乘旋轉(zhuǎn)矩陣就好桅打。
進(jìn)階操作
不繞xyz軸旋轉(zhuǎn),過原點(diǎn)繞任意軸進(jìn)行多次旋轉(zhuǎn)
如圖轻纪,我們要將物體繞著直線z=y按右手方向旋轉(zhuǎn)30度油额,這種情況就相對(duì)比較復(fù)雜了,因?yàn)樗⒉皇莤yz軸刻帚,所以我們旋轉(zhuǎn)時(shí)有以下三步操作:
將坐標(biāo)系進(jìn)行旋轉(zhuǎn)操作潦嘶,令$z=y$與原z軸重合,原z軸操作后的位置為z'軸崇众;
將物體繞z軸按右手方向旋轉(zhuǎn)30度掂僵;
將坐標(biāo)系進(jìn)行旋轉(zhuǎn)操作,令z'軸與原z軸重合顷歌。
正如上圖锰蓬,左邊為原坐標(biāo)系,右邊為繞x軸旋轉(zhuǎn)45度后的新坐標(biāo)系眯漩,其中旋轉(zhuǎn)過后的坐標(biāo)系為xy'z'芹扭,我們想要繞著轉(zhuǎn)的直線(原z=y)現(xiàn)在變成了z軸,那么這樣子就變成了繞z軸旋轉(zhuǎn)的情況赦抖。
所以我們將繞x軸旋轉(zhuǎn)坐標(biāo)系的操作記為A(45)舱卡,所以物體現(xiàn)在的坐標(biāo)為$R'=A(45)R$。
之后我們就可以將物體繞z軸右手方向旋轉(zhuǎn)30度了队萤,操作記為B(30)轮锥,所以現(xiàn)在物體的坐標(biāo)為$R''=B(30)R'$。
但是此時(shí)我們的坐標(biāo)系還是以原z=y為z軸的坐標(biāo)系要尔,我們需要把z'軸轉(zhuǎn)過來舍杜,變成最初的那個(gè)樣子新娜,所以我們需要把坐標(biāo)系繞x軸旋轉(zhuǎn)-45度,這樣子z'就和z重合了既绩,z=y也回到了原來的位置概龄。
所以這一步操作記為A(-45),物體現(xiàn)在的坐標(biāo)為R'''=A(-45)R''饲握。
最后總的來說旁钧,這個(gè)物體從最初的狀態(tài)到最后的狀態(tài)相當(dāng)于進(jìn)行了三步操作,乘上了三個(gè)矩陣互拾,即R'''=A(-45)B(30)A(45)R.
圍繞軸不經(jīng)過原點(diǎn)的旋轉(zhuǎn)-初級(jí)
上面的方法全部都要經(jīng)過原點(diǎn)歪今,但如果我們想要圍著轉(zhuǎn)的對(duì)稱軸不經(jīng)過原點(diǎn)呢?這就要多加一個(gè)操作了颜矿,那就是給坐標(biāo)加上個(gè)某一個(gè)值寄猩,比如我有坐標(biāo)向量(x, y, z),想要向x軸平移1單位骑疆,那么新的坐標(biāo)就變成了(x+1, y, z)田篇,相當(dāng)于進(jìn)行了如下操作
(x', y', z') = (x, y, z) + (1, 0, 0)
所以我們這里定義一個(gè)新操作D(a,x)。其中a代表沿著位移方向的軸箍铭,方向只有三個(gè)泊柬,xyz。x代表的是唯一的距離诈火,比如說上述操作就可以寫為D(x,1)兽赁,總的公式為R'=R+D(x,1)。
圍繞軸不經(jīng)過原點(diǎn)的旋轉(zhuǎn)-高級(jí)
我們現(xiàn)在要將一個(gè)物體R繞著z=y-1這條線為軸右手方向旋轉(zhuǎn)30度冷守。其實(shí)步驟依舊和上面一模一樣刀崖,只不過將z=y-1轉(zhuǎn)到z軸上更為麻煩了而已,主要分為以下步驟拍摇。
首先將z=y-1平移到經(jīng)過原點(diǎn)亮钦,也就是將坐標(biāo)軸向y方向平移-1個(gè)單位,即操作D(y,1)充活,平移后的物體坐標(biāo)為R'=R+D(y,-1)蜂莉。
然后就是之前舉的例子了,我們直接可以寫得(我用R2代替R''混卵,以此類推)
R2=A(45)R'
R3=B(30)R2
R4=A(-45)R3
最后到了這里我們還得把z=y-1移到原來位置映穗,也就是再加上一個(gè)D(y,1)操作,也就是
R5=R4+D(y,-1)
=A(-45)B(30)A(45)[R+D(y,-1)]+D(y,1)
這樣子淮菠,我們就可以實(shí)現(xiàn)任何操作
總結(jié)
可以看出男公,我們最終達(dá)到實(shí)現(xiàn)任何操作的步驟為三步
將我們想要旋轉(zhuǎn)的軸通過旋轉(zhuǎn)與平移操作將其與任一坐標(biāo)軸重合荤堪;
進(jìn)行我們想要繞著旋轉(zhuǎn)軸旋轉(zhuǎn)的操作合陵;
將旋轉(zhuǎn)軸通過旋轉(zhuǎn)與平移操作移動(dòng)到原來的位置枢赔。
并且我們的基礎(chǔ)操作總共有4個(gè),其中三個(gè)旋轉(zhuǎn)一個(gè)平移拥知,分別為:
繞x軸右手方向旋轉(zhuǎn)t角度記為A(t);
繞y軸右手方向旋轉(zhuǎn)t角度記為B(t);
繞z軸右手方向旋轉(zhuǎn)t角度記為C(t);
沿某一軸(記為a軸)正方向平移x距離記為D(a, x)踏拜。
這樣子我們得到的坐標(biāo)就是我們實(shí)現(xiàn)了當(dāng)前操作的坐標(biāo)。
下一篇文章講利用編程實(shí)現(xiàn)這些操作低剔。