坐標系的概念和坐標系之間的變換

一磷仰、坐標系的基本概念及其重要作用

坐標系是建立圖形與數(shù)之間對應聯(lián)系的參考系。它可以直觀方便的描述圖形的幾何信息境蔼、大小灶平、位置伺通。

在計算機圖形學中,從對象的建模逢享,到在不同顯示設備上顯示罐监、處理圖形時會使用一系列的坐標系。例如:在屏幕上瞒爬,會使用像素構成的二維坐標系來表示圖形的像素值弓柱。


顯示屏上的像素坐標系.png

對于一個給定的場景,我們通常并不是按照像素坐標來考慮侧但。我們要考慮屏幕適配矢空、組件復用、軟件跨平臺等等一系列工程化問題俊犯。因此妇多,我們希望將程序中用于描述對象幾何信息(形狀,拓撲結構)的數(shù)值燕侠,和那些用于描述對象中大小和位置的數(shù)值區(qū)分開來者祖。

前者通常被看作一個建模(moduling)的任務,后者是一個觀察(viewing)的任務绢彤。

例如七问,教室里一張桌子,我們需要從不同距離和角度去描繪茫舶,并顯示到屏幕械巡。針對這個問題,我們當然可以把每次“建模-觀察”的結果一一繪制到屏幕上饶氏。但是讥耗,我們需要注意到在這個過程中,桌子的幾何信息客觀上是固定不變的疹启。因此古程,我們可以把“建模”的任務和“觀察”的任務分離開來喊崖,每次繪制只需要改變觀察任務的的數(shù)值即可挣磨。

當我們把“建模”與“觀察”分開后荤懂,產(chǎn)生一個新的問題茁裙,即多坐標系問題。不同的坐標系具有它存在的必要性节仿。

為了方便“建奈钭叮”,我們給每一個建模任務構建一個自己的坐標系廊宪,叫做建模坐標系矾瘾。同時眉踱,為了方便“觀察”,我們也給每一個觀察任務構建一個觀察坐標系霜威。為了完成某一次圖形的顯示,我們需要建立相應“建牟崃遥”任務和相應“觀察”任務的適當?shù)挠成潢P系戈泼,因此產(chǎn)生了世界坐標系的概念。為了使得計算機圖形能夠在特定的屏幕上正確顯示赏僧,我們需要知道特定屏幕的屏幕坐標系大猛,即設備坐標系。為了使得計算機圖形能夠在不同屏幕上正確顯示淀零,我們又定義了規(guī)范化坐標系挽绩。另外,對于一個大場景驾中,我們可能只關注某一局部唉堪。因此,產(chǎn)生了裁剪坐標系肩民。

二唠亚、計算機圖形學中坐標系的分類

1. 世界坐標系(World coodinate system)

在系統(tǒng)(場景)中用于描述其他坐標系位置和對象模型位置的參考坐標系,被稱為世界坐標系持痰。

在我的理解中灶搜,世界坐標系是一個特定場景中全局的、絕對的公共參照系工窍。

注意這句話割卖,“全局的”、“絕對的”患雏,都是在我們所關心的特定的場景中鹏溯,這個特定場景很多情況下并非真實世界或者宇宙,它可能是一間房纵苛,一個虛擬的游戲世界剿涮。

2. 建模坐標系

用于描述對象的幾何信息的獨立于世界坐標系的參照系,叫做建模坐標系攻人。

建模坐標系又被稱為局部坐標系取试。一旦定義了“局部”(相對于上面提到的世界坐標系的全局)的對象,就可以很容易地將“局部”對象放入世界坐標系中怀吻,使它由局部升為全局瞬浓。

3. 觀察坐標系

觀察坐標系主要用于從觀察者的角度對整個世界坐標系中的對象進行重新定位和描述。

依據(jù)觀察窗口的方向和形狀在世界坐標系中定義的坐標系被稱為觀察坐標系蓬坡。

觀察坐標系用于指定圖形的輸出范圍猿棉。

對于世界坐標系來說磅叛,觀察坐標系其實是一種特殊的建模坐標系。

4. 設備坐標系

適合特定輸出設備輸出對象的坐標系叫做設備坐標系萨赁。比如屏幕坐標系弊琴。

在多數(shù)情況下,每一個具體的顯示設備杖爽,都有一個單獨的坐標系統(tǒng)敲董。

5. 規(guī)范化坐標系

規(guī)范化坐標系獨立于設備,能夠很容易地轉(zhuǎn)變?yōu)樵O備坐標系慰安,是一個中間坐標系腋寨。
為使圖形軟件能在不同設備之間移植,采用規(guī)范化坐標系化焕,其坐標軸取值范圍是[-1, 1]或[0, 1]萄窜。

三、坐標系之間的映射變換

前面提到撒桨,對于給定的問題查刻,我們大致分為“建模”和“觀察”兩個任務元莫。對于一個給定的對象模型赖阻,我們已知它在建模坐標系下的坐標,我們?nèi)绾卧谟^察坐標系下得到該對象的定位和描述踱蠢。

像這種已知對象在一個坐標系的坐標火欧,要獲得該對象在另一坐標系下的坐標,我們把這一過程叫做坐標轉(zhuǎn)換茎截。而這個過程離不開世界坐標系苇侵,因為世界坐標系決定了建模坐標系與觀察坐標系的映射關系。

需要注意企锌,坐標轉(zhuǎn)換過程中榆浓,對象的實際位置和狀態(tài)并未發(fā)生改變,我們僅僅是使用了不同的坐標系描述對象的位置撕攒。

例下圖陡鹃,在一個世界坐標系Oxy中,一個點P在建模坐標系A中的坐標為(1, 1)《镀海現(xiàn)在得到觀察坐標系BP點的坐標萍鲸。

坐標變換.png

從圖中,我們可以很容易的得出擦俐,點P在觀察坐標系B中的坐標為(3, 2)脊阴。然而,在實際問題中,我們不可能總能通過觀察得出新的坐標嘿期,這就需要通過變換計算得到品擎。

就這個問題,我們先要得到建模坐標系A(\alpha_1,\alpha_2)到觀察坐標系B(\beta_1,\beta_2)的變換矩陣R:
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = R \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag1
可以看到备徐,坐標系A先平移向量T_1(-1,-3)萄传,再平移向量T_2(5,2),最后基于Y軸反射S(-1,1)得到坐標系B(實際應用中蜜猾,連續(xù)的相同變換操作可以合并盲再,如這里的連續(xù)平移可以合并為T_{12}(4,-1),這里為了更清晰表示變換過程——建模坐標系\rightarrow 世界坐標系\rightarrow 觀察坐標系瓣铣,將其拆分出來)。代入式(1)得到:
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & 5 \\ 0 & 1 & 2 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} -1& 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag2
所以贷揽,由式(2)可知A\rightarrow B基變換矩陣:
M_{ab}= \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 &-1 \\ 0 & 0 & 1 \end{matrix} \right\}\tag3
由式(3)可得坐標變換矩陣M^{-1}_{ab}
M_{ab}^{-1}= \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{matrix} \right\}\tag4
則棠笑,點P在坐標系B中的坐標P_1為:
P_1 = \left\{ \begin{matrix} -1 & 0 & 4 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 \\ 1 \\ 1 \\ \end{matrix} \right\} = \left\{ \begin{matrix} 3 \\ 2 \\ 1 \end{matrix} \right\}
同樣的,我們可以得出B\rightarrow A的基變換矩陣M_{ba}為:
M_{ba}= \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{matrix} \right\}\tag5
他恰好就是A \rightarrow B的坐標變換矩陣禽绪。因此蓖救,我們要求A \rightarrow B的坐標變換矩陣就可以改為求B \rightarrow A的基變換矩陣,可以少一次矩陣的逆運算印屁。

通過這個示例循捺,我們可以得出一個結論,計算機中雄人,圖形的顯示過程就是幾何(對象)模型在不同坐標系之間的映射變換从橘。

在圖中我們可以觀察到,A\rightarrow B可以先經(jīng)過兩次平移础钠,再經(jīng)過一次反射得到恰力,記作M_a,也可以是先經(jīng)過一次反射再經(jīng)過兩次平移得到,記作M_b旗吁,或者更多的變換組合……踩萎,但結果肯定是惟一的。

我們嘗試將式(2)中的ST_1交換順序以實現(xiàn)變換M_b
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} -1& 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & 5 \\ 0 & 1 & 2 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag6 \color{red}{(錯誤示例)}
得到的結果是:
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} -1 & 0 & -4 \\ 0 & 1 & -1 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag7 \color{red}{(錯誤示例)}
這與式(3)的結果不一致很钓,因為矩陣點乘一般不滿足交換律香府。可是码倦,這與我們觀察到的M_aM_b都可行的結果不一致企孩。

其實M_aM_b兩種變換順序都沒有問題,只不過我們觀察變換M_b時采用的的參考系出了問題叹洲。

M_a的所有變換操作都隱藏了一個前提:基于目標坐標系(變換操作的參照系)原點的變換柠硕。如T_1(-1,-3)實際應該是:
T_1= M \cdot \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\}, \text(M為單位矩陣)
M_b中第一步的反射并非基于世界坐標系Y軸的變換,而是基于Y_0(1,n)的反射,所以應該先平移T_x(-1,0),再做反射操作蝗柔。正確的表達式是:
S_1= \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\}
修正后的變換過程我們記作M_c闻葵。
M_c = \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & -5 \\ 0 & 1 & 2 \\ 0 & 0 & 1 \end{matrix} \right\} = \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 & -1 \\ 0 & 0 & 1 \end{matrix} \right\}
可以看到,結果與式(3)相同癣丧。

雖然M_aM_c都可以得到正確的結果槽畔,但是為了防止出現(xiàn)如M_b一般的錯誤或為了減少計算量邑飒,在連續(xù)不同坐標系變換過程中举娩,我們應該始終以本次變換的目標坐標系作為參考系進行先平移后作線性變換。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睹逃,一起剝皮案震驚了整個濱河市嬉橙,隨后出現(xiàn)的幾起案子早直,更是在濱河造成了極大的恐慌,老刑警劉巖市框,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霞扬,死亡現(xiàn)場離奇詭異,居然都是意外死亡枫振,警方通過查閱死者的電腦和手機喻圃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粪滤,“玉大人斧拍,你說我怎么就攤上這事≌刃。” “怎么了肆汹?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長予权。 經(jīng)常有香客問我县踢,道長,這世上最難降的妖魔是什么伟件? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任硼啤,我火速辦了婚禮,結果婚禮上斧账,老公的妹妹穿的比我還像新娘谴返。我一直安慰自己,他們只是感情好咧织,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布嗓袱。 她就那樣靜靜地躺著,像睡著了一般渠抹。 火紅的嫁衣襯著肌膚如雪奇颠。 梳的紋絲不亂的頭發(fā)上广鳍,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天祖秒,我揣著相機與錄音狈涮,去河邊找鬼晕鹊。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼颠通,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吏砂?” 一聲冷哼從身側(cè)響起撵儿,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狐血,沒想到半個月后淀歇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡匈织,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年浪默,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀匕。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡纳决,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乡小,到底是詐尸還是另有隱情阔加,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布满钟,位于F島的核電站胜榔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏湃番。R本人自食惡果不足惜夭织,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吠撮。 院中可真熱鬧尊惰,春花似錦、人聲如沸泥兰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逾条。三九已至琢岩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間师脂,已是汗流浹背担孔。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工江锨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人糕篇。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓啄育,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拌消。 傳聞我的和親對象是個殘疾皇子挑豌,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容