坐标系转换分析
從二維坐標(biāo)系說起:
二維平面直角坐標(biāo)系定義可分為兩類,從逆時針角度看,第一類為X坐標(biāo)軸在Y坐標(biāo)軸后;第二類為X坐標(biāo)軸在Y坐標(biāo)軸前。
有這兩類坐標(biāo)系添加第三個坐標(biāo)軸Z,得到空間直角坐標(biāo)系,在默認添加的坐標(biāo)軸Z垂直紙面朝向外側(cè)下,分別得到左手空間直角坐標(biāo)系和右手空間直角坐標(biāo)系。
而對于坐標(biāo)的轉(zhuǎn)換,最簡單的依然從二維坐標(biāo)系講起。
以第一類二維平面直角坐標(biāo)為例,涉及的坐標(biāo)轉(zhuǎn)換有下圖中4種情況:a,b,c,d.
基礎(chǔ)一 原坐標(biāo)系坐標(biāo)轉(zhuǎn)到新坐標(biāo)系
?a與b為已知原坐標(biāo)系下坐標(biāo),從原坐標(biāo)系(藍色表示)旋轉(zhuǎn)角度θ,獲得新坐標(biāo)系下坐標(biāo)(紅色表示):
此處注意:定義角度的正負應(yīng)統(tǒng)一,即存在原坐標(biāo)系與新坐標(biāo)系的概念,新坐標(biāo)系相對于原坐標(biāo)系的旋轉(zhuǎn)角度為逆時針時為正值。
針對情況a有:
?
即:
?
(注:從簡單直觀方面理解為,當(dāng)原坐標(biāo)系轉(zhuǎn)角度θ到新坐標(biāo)系過程中,y坐標(biāo)值在新坐標(biāo)系中是變大的,x坐標(biāo)值在新坐標(biāo)系中是變小的。因此,y方向的三角系數(shù)都為正,x方向存在負值情況。可以標(biāo)記為沿旋轉(zhuǎn)方向數(shù),第一條坐標(biāo)軸數(shù)值是變大的,條件是旋轉(zhuǎn)方向角度為無符號數(shù)值。)
因此,針對a和b兩種情況,由原坐標(biāo)系經(jīng)過旋轉(zhuǎn)一定角度,轉(zhuǎn)換到新的坐標(biāo)系下,得到的旋轉(zhuǎn)矩陣為:
?
其中θ為具有正負號的角度值,當(dāng)為正值時代表原坐標(biāo)系沿逆時針旋轉(zhuǎn);為負值時代表原坐標(biāo)系沿順時針旋轉(zhuǎn)。
基礎(chǔ)二 新坐標(biāo)系坐標(biāo)轉(zhuǎn)回原坐標(biāo)系
而情況c與d是表示已知新坐標(biāo)系下坐標(biāo),經(jīng)過坐標(biāo)轉(zhuǎn)換獲得在原坐標(biāo)系下坐標(biāo):
此處注意:定義角度的正負應(yīng)統(tǒng)一,即存在原坐標(biāo)系與新坐標(biāo)系的概念,新坐標(biāo)系與原坐標(biāo)系的旋轉(zhuǎn)角度為逆時針時為正值。
在c與d情況中,因為定義了逆時針旋轉(zhuǎn)角度為正,所以c中旋轉(zhuǎn)的角度為(-θ),d中旋轉(zhuǎn)的角度為(θ)。而沿逆時針旋轉(zhuǎn)時,在該方向上第一條坐標(biāo)軸為Y軸,所以基本公式為:
小結(jié):
定義了坐標(biāo)軸的指向,以及新坐標(biāo)系與原坐標(biāo)系旋轉(zhuǎn)角度的正負關(guān)系后,可以確定原坐標(biāo)系轉(zhuǎn)到新坐標(biāo)系運算與你運算正弦系數(shù)符號變換。
因此,要確定旋轉(zhuǎn)矩陣內(nèi)容必須要確定兩個因素,一是坐標(biāo)軸的指向,二是旋轉(zhuǎn)角度的正負定義。
(1)當(dāng)存在原坐標(biāo)系與新坐標(biāo)系概念時,必然的旋轉(zhuǎn)角度的正負定義必須一致,此時由原坐標(biāo)系到新坐標(biāo)系的轉(zhuǎn)換,可嚴(yán)密的進行返回坐標(biāo)轉(zhuǎn)換。
(2)當(dāng)只存在當(dāng)前坐標(biāo)系下坐標(biāo)轉(zhuǎn)到另一個坐標(biāo)系下坐標(biāo)時,根據(jù)確定的旋轉(zhuǎn)角度正負,參考基礎(chǔ)一即可轉(zhuǎn)換。基礎(chǔ)一中只表示了逆時針旋轉(zhuǎn)角度為正的情況,順時針旋轉(zhuǎn)為正的情況可仿照進行。
(3)無論什么情況下,選取旋轉(zhuǎn)角度定義為正(無論逆時針還是順時針旋轉(zhuǎn))時作為基礎(chǔ),沿旋轉(zhuǎn)方向數(shù)的第一條坐標(biāo)軸的坐標(biāo)值應(yīng)變大,即在新坐標(biāo)系下對應(yīng)該坐標(biāo)軸上的坐標(biāo)值組合為cos+sin的形式,而另一坐標(biāo)軸上坐標(biāo)值為-sin+cos形式。
在基礎(chǔ)一與基礎(chǔ)二中都可印證(3)的說明。再增加一條印證示例:
在情況e中,定義從藍色坐標(biāo)系旋轉(zhuǎn)到紅色坐標(biāo)系,定義圖中狀態(tài)的旋轉(zhuǎn)角度θ為正,則此時坐標(biāo)轉(zhuǎn)換關(guān)系為:
?
情況f中,依然定義圖中狀態(tài)為旋轉(zhuǎn)角度θ為正值,但是從紅色坐標(biāo)系轉(zhuǎn)到藍色坐標(biāo)系:
從旋轉(zhuǎn)方向遇到的第一個坐標(biāo)軸Y坐標(biāo)開始整理,則有:
?
旋轉(zhuǎn)矩陣的形式依然是正規(guī)形式,以x,y為順序排列為:
?
在情況e中定義了目標(biāo)坐標(biāo)系在原坐標(biāo)系的逆時針方向為正,情況f中定義了目標(biāo)坐標(biāo)系在原坐標(biāo)系的順時針方向為正,這兩種情況從純坐標(biāo)系的轉(zhuǎn)換方面印證了上面(3)中總結(jié)的,即以正值旋轉(zhuǎn)角度為基礎(chǔ),沿旋轉(zhuǎn)方向第一條坐標(biāo)軸上的坐標(biāo)為cos+sin形式:e中第一條坐標(biāo)軸為x軸,f中第一條坐標(biāo)軸為y軸。從坐標(biāo)轉(zhuǎn)換與逆轉(zhuǎn)換方面印證了(1)中總結(jié)結(jié)果,即存在正轉(zhuǎn)換與逆轉(zhuǎn)換時,定義的正旋轉(zhuǎn)角度應(yīng)一致,此時的正反旋轉(zhuǎn)矩陣相乘為單位矩陣。
?
基礎(chǔ)三 平面坐標(biāo)系中討論左右手系的轉(zhuǎn)換問題
情況h中從藍色坐標(biāo)系旋轉(zhuǎn)角度θ到紅色坐標(biāo)系下,兩坐標(biāo)系的坐標(biāo)軸向定義不同,產(chǎn)生類似左右手系問題,在這類轉(zhuǎn)換中,首先將目標(biāo)坐標(biāo)系的軸向假設(shè)與原坐標(biāo)系軸向定義為一類,然后更換坐標(biāo)符號獲得兩坐標(biāo)系的轉(zhuǎn)換。
第一步:假設(shè)X’與Y’軸互換,此時原坐標(biāo)系與目標(biāo)坐標(biāo)系定義類似,相差角度θ,定義目標(biāo)坐標(biāo)系與原坐標(biāo)系之間逆時針旋轉(zhuǎn)角度為正,得到:
?
根據(jù)假設(shè)坐標(biāo)與真實坐標(biāo)關(guān)系獲得兩坐標(biāo)系真實關(guān)系:
按順序排放整理:
即,進行左右系的坐標(biāo)系轉(zhuǎn)換時的旋轉(zhuǎn)矩陣為:
以情況i作為驗證示例:
依然定義目標(biāo)(紅)坐標(biāo)系轉(zhuǎn)到原(藍)坐標(biāo)系時,目標(biāo)坐標(biāo)系相對原坐標(biāo)系旋轉(zhuǎn)角度為逆時針時為正。
假設(shè)原坐標(biāo)系的坐標(biāo)軸向與目標(biāo)坐標(biāo)系的軸向類似定義,為x(偽),y(偽)。
則
?
?
?
按順序整理得到:
得由目標(biāo)坐標(biāo)系轉(zhuǎn)回原坐標(biāo)系的旋轉(zhuǎn)矩陣為:
由
得該轉(zhuǎn)換過程成立。
?
小結(jié):在處理坐標(biāo)系向量的順序整理時需要進行公式的元素調(diào)換。
(1)????針對等號左邊結(jié)果的調(diào)換如
要變?yōu)?/p>
?
時,只需等號右面矩陣的行進行相應(yīng)對調(diào):
?
(2)????只針對等號右面最后原坐標(biāo)值向量內(nèi)容調(diào)換時,等式的左右都需要變化。如
但是要保持等號左邊的向量順序不變時需要兩步:
第一步:首先利用(1)將等號左邊向量調(diào)換為:
驗證,變換后的結(jié)果與初始狀態(tài)一致。
?
基礎(chǔ)四 三維空間直角坐標(biāo)系的正轉(zhuǎn)換問題
三維空間直角坐標(biāo)的坐標(biāo)轉(zhuǎn)換可由二維平面直角坐標(biāo)轉(zhuǎn)換擴展來,在二維坐標(biāo)系中的坐標(biāo)轉(zhuǎn)換只有一個角度的旋轉(zhuǎn),也就產(chǎn)生一個旋轉(zhuǎn)矩陣。在三維空間直角坐標(biāo)系中存在三個方向的角度旋轉(zhuǎn)問題,因此產(chǎn)生三個旋轉(zhuǎn)矩陣相乘的結(jié)果。但是針對沿某一坐標(biāo)軸旋轉(zhuǎn)某一角度時,又回歸到二維坐標(biāo)旋轉(zhuǎn)問題。因此,三維空間直角坐標(biāo)的坐標(biāo)旋轉(zhuǎn)問題是三個二維平面直角坐標(biāo)旋轉(zhuǎn)問題的順序操作問題。(但是由于某一角度旋轉(zhuǎn)后,后一角度的旋轉(zhuǎn)是否對前者有耦合效應(yīng),應(yīng)該深入研究探討)
下面首先討論三維空間直角坐標(biāo)系的坐標(biāo)轉(zhuǎn)換問題。
以右手坐標(biāo)系為例,研究原坐標(biāo)系到新坐標(biāo)系經(jīng)過首搖,縱搖,橫搖角度的轉(zhuǎn)換過程以及逆過程。
A 原坐標(biāo)系轉(zhuǎn)換到新坐標(biāo)系
首先定義坐標(biāo)系以及旋轉(zhuǎn)角度的正負定義
定義右手坐標(biāo)系如圖,沿各坐標(biāo)軸正向的反方向看,另外兩坐標(biāo)平面沿逆時針旋轉(zhuǎn)時,定義為沿該坐標(biāo)軸正角度旋轉(zhuǎn)。
由此定義沿X,Y,Z軸逆時針旋轉(zhuǎn)角分別為α,β,γ。
從X->Y->Z軸的順序,分別分析坐標(biāo)轉(zhuǎn)換矩陣的形式。
沿X軸方向旋轉(zhuǎn)α角度時對應(yīng)的關(guān)系圖
根據(jù)圖中關(guān)系可以得到第一次轉(zhuǎn)換后的坐標(biāo),由于沿X軸旋轉(zhuǎn),所以新坐標(biāo)中X信息不變。根據(jù)以上基礎(chǔ)問題的討論可以得到:
?
沿Y軸方向旋轉(zhuǎn)β角度時對應(yīng)的關(guān)系圖
根據(jù)圖中關(guān)系可以得到第二次轉(zhuǎn)換后的坐標(biāo),由于沿Y軸旋轉(zhuǎn),所以新坐標(biāo)中Y信息不變。根據(jù)以上基礎(chǔ)問題的討論可以得到:
?
注:沿Y的旋轉(zhuǎn)矩陣與沿X軸的旋轉(zhuǎn)矩陣形式出現(xiàn)不同,原因在于,當(dāng)沿X軸旋轉(zhuǎn)時,沿正旋轉(zhuǎn)角度的第一條邊為Y軸,即Y值變大。而沿Y軸進行旋轉(zhuǎn)時,第一條邊Z軸的對應(yīng)值變大,而在向量擺放時Z值放在最下方,因此利用基礎(chǔ)問題三中的等號右邊最后向量重現(xiàn)擺放時需要整體變換,變換結(jié)果為以上所示。
?
沿Z軸方向旋轉(zhuǎn)γ角度時對應(yīng)的關(guān)系圖
根據(jù)圖中關(guān)系可以得到第三次轉(zhuǎn)換后的坐標(biāo),由于沿Z軸旋轉(zhuǎn),所以新坐標(biāo)中Z信息不變。根據(jù)以上基礎(chǔ)問題的討論可以得到:
?
注:沿Z軸與沿X軸的旋轉(zhuǎn)矩陣類似,因為這兩種情況下按旋轉(zhuǎn)方向得到的坐標(biāo)軸順序與XYZ順序一致,因此不需要進行順序重排,而沿Y軸旋轉(zhuǎn)時,Z軸在X軸前面,因此需要重排順序,重排后,矩陣形式發(fā)生變化。從另一個角度說,當(dāng)沿Z軸和X軸旋轉(zhuǎn)時,坐標(biāo)變大的分別為X值和Y值,因此其對應(yīng)的矩陣行都為正,沿Y軸旋轉(zhuǎn)時,坐標(biāo)變大的為Z值,因此Z坐標(biāo)對應(yīng)的行矩陣系數(shù)為正。
?
如果知道原坐標(biāo)系通過沿X、Y、Z軸的順序進行旋轉(zhuǎn)到新坐標(biāo)系,則新坐標(biāo)系下坐標(biāo)為:
基礎(chǔ)五 三維空間直角坐標(biāo)系的逆轉(zhuǎn)換問題
若已知從原坐標(biāo)系到新坐標(biāo)系的角度旋轉(zhuǎn)關(guān)系,如原坐標(biāo)系首先沿X軸旋轉(zhuǎn)α,然后沿Y軸旋轉(zhuǎn)β,最后沿Z軸旋轉(zhuǎn)γ。則坐標(biāo)正轉(zhuǎn)換時(即)的公式:
?
進行三維坐標(biāo)逆轉(zhuǎn)換時,一致新坐標(biāo)系下坐標(biāo),以及新舊坐標(biāo)系的角度旋轉(zhuǎn)順序和信息。
則由以上信息可推測坐標(biāo)逆轉(zhuǎn)換為:
?
R(α)與R’(α),R(β)與R’(β),R(γ)與R’(γ)互為逆矩陣。旋轉(zhuǎn)順序為沿Z軸、Y軸和X軸進行轉(zhuǎn)換。
1.首先從Z軸轉(zhuǎn)換:
定義的沿Z軸逆時針旋轉(zhuǎn)時角度為正,此時進行的坐標(biāo)轉(zhuǎn)換為從紅色坐標(biāo)系到原坐標(biāo)系的旋轉(zhuǎn),即旋轉(zhuǎn)角度為(-γ)。針對從新坐標(biāo)系(0-X’Y’Z’)到原坐標(biāo)系的逆轉(zhuǎn)換有兩種方式:
(1)????采用原坐標(biāo)系到新坐標(biāo)系的旋轉(zhuǎn)角度正負定義獲取坐標(biāo)轉(zhuǎn)換公式,然后將(-γ)代入公式即可:
根據(jù)前面所講,確定旋轉(zhuǎn)矩陣時,根據(jù)旋轉(zhuǎn)角θ正方向和第一個坐標(biāo)軸X’可快速確定旋轉(zhuǎn)公式:?
將實際旋轉(zhuǎn)角度(-γ)代入得:
?
(2)????不考慮整個系統(tǒng)定義的角度正負(此時適應(yīng)條件中只給出兩坐標(biāo)系間的相差的角度,沒有正負定義時),按給出的角度(數(shù)值應(yīng)為一個正值)和兩坐標(biāo)系的實際旋轉(zhuǎn)關(guān)系確定旋轉(zhuǎn)矩陣。此時,由新坐標(biāo)系(0-X’Y’Z’)順時針方向旋轉(zhuǎn)角度γ得到原坐標(biāo)系下坐標(biāo),則在沿旋轉(zhuǎn)方向中第一條坐標(biāo)軸為Y軸(即數(shù)值變大軸):
方法(1)和方法(2)的結(jié)果完全相同。但是方法(1)存在角度的正負定義問題,并且前后連貫一致,多在測繪中的姿態(tài)儀中出現(xiàn),對于姿態(tài)儀中給出的姿態(tài)角度可以用一套公式表示(如方法1中結(jié)果的第一種表達方法),而方法(2)只存在一種結(jié)果形式,因此不適用存在整體性角度正負定義的問題。
則沿Z軸的旋轉(zhuǎn)矩陣
2.沿Y軸轉(zhuǎn)換
沿Y軸方向旋轉(zhuǎn)角度時對應(yīng)的關(guān)系圖
根據(jù)圖中關(guān)系可以得到沿Y軸順時針旋轉(zhuǎn)β角度到原坐標(biāo)系下,從定義的沿Y軸逆時針方向旋轉(zhuǎn)角度為正的角度確定旋轉(zhuǎn)角度為(-β)。在該圖中沿正旋轉(zhuǎn)角度時,第一個坐標(biāo)軸為Z軸,所以得到的基本旋轉(zhuǎn)矩陣為:?
3.沿X軸旋轉(zhuǎn)
沿X軸方向旋轉(zhuǎn)α角度時對應(yīng)的關(guān)系圖
由于沿X軸旋轉(zhuǎn),所以新坐標(biāo)中X信息不變。沿X軸順時針旋轉(zhuǎn)角度α得到原坐標(biāo)系下坐標(biāo)。根據(jù)定義的角度旋轉(zhuǎn)正負關(guān)系,定義逆時針旋轉(zhuǎn)角度為正,因此旋轉(zhuǎn)的角度為(-α)。沿X軸逆時針正旋轉(zhuǎn)時,第一個坐標(biāo)軸為Y軸,因此基本公式為:
?
綜上,經(jīng)過沿Z-Y-X軸的坐標(biāo)你旋轉(zhuǎn),將在新坐標(biāo)系下坐標(biāo)轉(zhuǎn)回到原坐標(biāo)系下:
?
總結(jié):從一個坐標(biāo)系轉(zhuǎn)到新坐標(biāo)系,一般需要定義旋轉(zhuǎn)角度的正負,一旦正負的方向定義后,從原坐標(biāo)系到新坐標(biāo)系的旋轉(zhuǎn)和從新坐標(biāo)系到原坐標(biāo)系的旋轉(zhuǎn)都可用這一個方向定義,此時需要考慮的是操作中出現(xiàn)了從原坐標(biāo)系到新坐標(biāo)的正轉(zhuǎn)換和新坐標(biāo)系到原坐標(biāo)系的逆轉(zhuǎn)換,逆轉(zhuǎn)換時須將采集的原坐標(biāo)系到新坐標(biāo)系的旋轉(zhuǎn)角度取反代入同一套公式。
另一種方法,對于只使用從原坐標(biāo)系到新坐標(biāo)系或者只使用新坐標(biāo)系到原坐標(biāo)系的旋轉(zhuǎn)過程時,可以單獨對旋轉(zhuǎn)過程定義一套旋轉(zhuǎn)角度正負使用問題,比如姿態(tài)中的橫搖一般定義為右舷下降為正值,那么假設(shè)當(dāng)前橫搖值為+10°,要從姿態(tài)傳感器坐標(biāo)系到水平坐標(biāo)系,在XOZ平面,認為順時針方向旋轉(zhuǎn)為正值,則此時X軸坐標(biāo)值應(yīng)為旋轉(zhuǎn)變大方,因此系數(shù)組合為Xcos+Zsin模式,旋轉(zhuǎn)矩陣也就確定下來了。該例子中,旋轉(zhuǎn)矩陣的確定存在一下2個條件:(1)直接使用了姿態(tài)儀給出的數(shù)值;(2)定義了順時針方向為正方向(只有這樣定義,才能直接用姿態(tài)儀給出的數(shù)值,否則要取反使用).
?
總結(jié)
- 上一篇: 简单的抽卡模拟器1.2
- 下一篇: Freemarker动态模板渲染flyi