思考 矩陣的級聯順序與座標系的關係

2021-06-08 22:28:40 字數 3045 閱讀 5843

還是關於矩陣的碎碎念,接上篇:

思考:矩陣及變換,以及矩陣在directx和opengl中的運用問題:左乘/右乘,行優先/列優先,...

5。矩陣的級聯順序與座標系的關係:

1). 變換的時候,座標系的選取是必需的

舉個例子:伸出左手,手掌水平,掌心向上,大拇指向左,其餘四指向前。此時選定物體的區域性座標系(cl(ol,xl,yl,zl))為:掌心為原點(ol),x軸(xl)指向四指指向,z(zl)軸指向大拇指指向,y軸(yl)指向掌心向上。全域性座標系(cg(og,xg,yg,zg))選定為和本地座標系重合。那麼,移動你的左手,區域性座標系就會隨手而動。全域性座標系還是原先的方位。為什麼選定座標系對於變換重要?因為相對於哪種座標系做變換得出的結果是不一定相同的。

還是上面那個例子:現在開始做變換,給你個指令:沿x軸旋轉手掌90度使得掌心向右,然後手掌沿y軸向+y方向移動10厘公尺。

你做完後,得出的結果可能有3種:

1. 手的位置比原先高了10厘公尺,這部分人居多。

2. 手的位置比原先靠右10厘公尺,這部分人居少。

3. 還有部分數人傻在那,變換不來,這部分人其實不傻。

其實這個變換指令沒有指定參考座標系,是變換不出來的。1類的是自己選了全域性座標系,2類是選了區域性座標系,3類的沒自己選。

所以,變換的時候,座標系的選取是必需的。

2). 級聯順序與座標系選取的關係

回到矩陣變換,一般我們說的對物體x進行m1變換,即x』= x*m1 (使用column matrix約定),隱含了選取全域性座標系的約定。單一變換的沒有級聯順序的問題。如果再進行乙個m2變換,此時,x』= x*m1*m2 還是x』= x*m2*m1呢?我們可能都知道是x』= x*m1*m2。顯然嘛,先做的變換先乘,但深層的原因是什麼呢?答案是隱含的全域性座標系的選定,如果選定的是區域性座標系,那麼x』= x*m2』*m1』。後面乙個變換反而要先進行。不信,看例子:

還是手掌例子,先旋轉後平移, 給你個指令:沿xg軸旋轉手掌90度使得掌心向右,然後手掌沿yg軸向+yg方向移動10厘公尺。

這下清楚不過了,完成後手掌比原先高了10厘公尺。此時變換公式:x』= x*r(xg)*t(yg)

手掌沿yl軸向+yl方向移動10厘公尺,然後沿xl軸旋轉手掌90度使得掌心向右。

看看完成後的結果,手是不是和上面的方位一樣?此時變換公式:x』= x*t(yl)*r(xl)

正序級聯是相對於全域性座標系,逆序級聯相對於區域性座標系,殊途同歸。下次有變換矩陣需要級聯的時候,先看看變換的矩陣是相對於全域性還是區域性的座標系。

一般規律:假定對物體x施加m1變換和m2變換,兩個變換矩陣均為相對於全域性座標系。有:

x』 = x*m1(g)*m2(g)

可以看作是將

x先經過

m1(g)

變換,再進行

m2(g)

變換,得到x』

由矩陣的結合律,上面等式等價於:

x』 = x*m2(g)*(m2(g)-1*m1(g)*m2(g))    

(m2(g)-1

為m2(g)

的逆矩陣)

所以,這個過程也可以這麼看,先對x進行

m2(g)(

也即m2(l))

變換(m2(g)

為相對於全域性座標系,但此時全域性和區域性座標系的重合,所以

m2(g)=m2(l)

),再對x進行

m2(g)-1*m1(g)*m2(g)變換(

也即m1(l)變換)

,這個變換實際上相當於先將物體退回到原方位(此刻區域性座標系退回到原始方位,也就是全域性座標系方位)進行

m1(g)

變換後,再進行

m2(g)

變換回來。

m2(g)-1*m1(g)*m2(g)

整體的效果就是

相對於此時的區域性座標系的進行

m1(l)

變換。故:

x』 = x*m2(l)*m1(l)

即,如果將變換認為是相對於區域性座標系而進行的,那麼矩陣級聯順序正好相反。

(注:上面推導有個這樣的前提:即初始變換時,選定區域性座標系和全域性座標系重合。如果區域性座標系是一般選取,即區域性座標系相對於全域性座標系的變換m(l/g) != identity呢,答案是結論一樣。因為m(l/g)可以認作是對於物體的變換。將x換成x(new)=x*m(l/g)而已。)

3). 如何選取,如何級聯

碰到的場景:

l 人手的運動

手有很多關節,每個關節的一端可以繞著關節處運動,關節本身也可以運動,要表達手指尖相對於人體的運動,使用相對於區域性座標系(關節)的變換比選取全域性座標系(人體)的變換要簡單清晰得多。

比如:乙個從手臂下垂到做出向上抬手手的動作之間,現在用矩陣變換來表達手掌的變換(x->x』)。

如果你選定區域性座標系(各個關節)做變換,那麼其表達就是:

上手臂繞肩關節旋轉90度(m1(肩)),下手臂繞肘關節轉45度(m2(肘)),手掌繞踝關節轉30度(m3(踝)),那麼:

x』 = x*m3(踝)*m2(肘)*m1(肩)

(注意和x』 = x*m1(肩)*m2(肘)*m3(踝)的不同)

如果你選定全域性座標系(人體/肩關節)做變換,那麼其表達就是:

上手臂繞肩關節旋轉90度(m1(肩)),下手臂繞肩關節(m2(肩)), 手掌繞肩關節(m3(肩))。。繞不過來了吧(m2(肩), m3(肩)很難表示出來)

x』 = x*m1(肩)*m2(肩)*m3(肩)

l 矩陣分解與 級聯順序

|r 0|

|t 1|

= r*t (先進行旋轉變換,後進行平移變換, 基於global座標系)

= t*r (先進行平移變換,後進行旋轉變換, 基於local座標系)

= r*t' (先進行旋轉變換,後進行平移變換, 基於local座標系, t'= r-1*t*r)

= t*r' (先進行平移變換,後進行旋轉變換, 基於global座標系, r' = t-1*r*t)

4). 結論

注意矩陣級聯順序和座標系選取的關係。在整體/部分相對運動較多的地方,選取區域性座標系描述變換。

OpenGL中的座標系與矩陣

1.opengl圖形管線 顯示流程 模型變換 modeling transformation mc 模型座標 child parent wc 世界座標 標準c語言的矩陣為行主序,即m i j 表示第i行 第j列。opengl中的矩陣為 列主序,即m i j 表示第i列 第j行。以下所有矩陣都為列主序...

地理座標系與投影座標系的區別

平時開展gis開發 研究 應用工作,總會接觸到座標系,也會遇到座標轉換的問題,如地理座標系 投影座標系等。地理座標系是球面座標,參考平面是橢球面,座標單位是經緯度 投影座標系是平面座標系,參考平面是水平面,座標單位是公尺 千公尺等。地理座標系轉換到投影座標系的過程理解為投影,即將不規則的地球曲面轉換...

向量 座標系旋轉的矩陣表示

在cartesian座標系中,存在向量 textbf a textbf b textbf a quad b 現在將座標系按原點逆時針旋轉 theta 注意 不是將 textbf 逆時針旋轉 textbf 在新座標系內的表示如下 mathbf begin cos theta sin theta sin...