關(guān)于在坐標(biāo)系中旋轉(zhuǎn)平移物體的理論基礎(chǔ)解析

關(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)槭亲约禾剿鞯降?,所以就對此比較上心,為了能夠?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,那么我們該怎么寫?

我們一步一步看,首先是繞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è)操作是對當(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í)際上是對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度,這種情況就相對比較復(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īng)過原點(diǎn),但如果我們想要圍著轉(zhuǎn)的對稱軸不經(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)-高級

我們現(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)任何操作的步驟為三步

  1. 將我們想要旋轉(zhuǎn)的軸通過旋轉(zhuǎn)與平移操作將其與任一坐標(biāo)軸重合;

  2. 進(jìn)行我們想要繞著旋轉(zhuǎn)軸旋轉(zhuǎn)的操作;

  3. 將旋轉(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)這些操作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 前言 OpenGL渲染3D模型離不開空間幾何的數(shù)學(xué)理論知識,而本篇文章的目的就是對空間幾何進(jìn)行簡單的介紹,并對...
    RichardJieChen閱讀 7,555評論 1 11
  • 忙碌的生活有時(shí)候來不及靜下來思考,常常一眨眼就過了好長一段時(shí)間,我喜歡寫東西也是因?yàn)閷憱|西的時(shí)候,會(huì)有屬于自己...
    香墨玄馥閱讀 274評論 0 0
  • ? 求你了,和我說分手吧。 感情里,有潔癖是最大的優(yōu)點(diǎn)了。 壹 最近刷了一個(gè)韓劇《有品位的她》,這大概是我看過的小...
    是年閱讀 869評論 0 1
  • 家有吃貨兩三枚?三四枚?四五枚?哈哈,謹(jǐn)以此文獻(xiàn)之! 吃貨哥哥 哥哥不滿四周歲的時(shí)候,有一次單獨(dú)和姥爺一起去串門,...
    峰寶貝閱讀 796評論 0 1

友情鏈接更多精彩內(nèi)容