標籤:

矩陣變換坐標系 深入理解

網址鏈接:從坐標系圖中理解「空間變換」

小談矩陣和坐標變換

矩陣坐標系變化理解

讓我們從一個實際的例子入手:下圖是一個用兩維的笛卡爾坐標系表示的二維空間。

其中,黑色坐標系 x-y代表一個二維空間藍色坐標系 i-j代表另外一個二維空間。已知藍色坐標系軸在黑色坐標系下對應的值是i=(1,1), j=(-1,1),又知橙色向量 p 處在 i-j 空間中,其坐標值為(2,1)。現在的問題是,這個 p 被轉換到黑色坐標系 x-y 空間下它的坐標值是什麼?

解決這個問題一個最關鍵也最直接的想法是「向量分解與再合成」。

p 可以被分解到 i 和 j 兩個方向,得到 p= 2i+j;同時 i 又可以分解到 x 和 y 兩個方向,得到 i = x + y,另外 j 也可以分解得到 j = -x + y。於是,我們全部展開,就得到 p(i-j) = 2i + j = 2(x + y) + (-x + y) = x + 3y = p(x-y) 。

因此點 p x-y 空間下的坐標值為(1,3)。

這種方法可以用來討論更一般的情況。假設p點在 i-j 坐標系下為(k1,k2),在 x-y 坐標系下為(q1,q2)。同樣地有基向量 i 對應在 x-y 空間中為(m1,m2);j 對應在 x-y 空間中為(n1,n2)。

於是我們有以下推導,

i = m1x + m2yj = n1x + n2y

於是,

p(i-j) = k1i + k2j

= k1(m1x + m2y) + k2(n1x + n2y)

= (k1m1 + k2n1)x + (k1m2 + k2n2)y

於是,

p(i-j) = (k1m1 + k2n1, k1m2 + k2n2)

= (q1, q2)

= p(x-y)

得到,

q1 = k1m1 + k2n1

q2 = k1m2 + k2n2

變換成矩陣形式:

其中(k1,k2)是 i-j 空間下的坐標值,而(q1,q2)是 x-y 空間下的坐標值。中間的矩陣就是用來做轉換的矩陣。從中我們可以發現,如果豎著來觀察,向量(m1,m2)就是基向量 ix-y 空間下的坐標值,而向量(n1,n2)則是基向量 jx-y 空間下的坐標值。這個矩陣,實際上就是由空間 i-j 下的基向量在空間 x-y 下的坐標值構成的。

1 矩陣的行序和列序(也稱行優先或列優先)僅僅是指矩陣的存儲方式,即我們如果用一個4*4數組m存儲矩陣,如果m[0][0]-m[0][3]連續存儲了矩陣的第一行,那麼就是行優先,反之就是列優先。無論是行優先還是列優先,它們代表的數學意義是相同的。

2 如果矩陣是行序,那麼它的第一列(m[0][0],m[1][0],m[2][0])就代表X變換,第二列就是Y變換,第三列就是Z變換。

我們來看看為什麼:

剛才提到矩陣把線性空間中的一個點給變換到另一個點,不妨稱變換前的點為P1(x1,y1,z1),變換後的點為P2(x2,y2,z2):

那麼根據線代中的矩陣乘法,P1 * M = P2展開就成了:

m00,m01,m02

(x1,y1,z1) * m10,m11,m12 = x1*m00+y1*m10+z1*m20+ x1*m01*

m20,m21, m22 y1*m11+z1*m21,x1*m02+y1*m12+z1*m22

所以:

x2 = x1*m[0][0] + y1*m[1][0] + z1*m[2][0];

y2 = x1*m[0][1] + y1*m[1][1] + z1*m[2][1];

z2 = x1*m[0][2] + y1*m[1][2] + z1*m[2][2];

看出什麼了嗎?

如果把一個行序矩陣(接下來討論的都是行序矩陣,就省略行序二字了)的每一列分別用X,Y,Z三個矢量來表示,那麼M就表示為:XYZ三根軸。

現在,矩陣M看起來是不是很像一個坐標系?而P1到P2的變換就是P1分別與X,Y,Z的點積!

也就是矩陣M是把P1從老坐標系變換到新坐標系,而矩陣的三列(三根軸)就分別代表了新坐標系的三根軸在老坐標系中的坐標!

而點積的幾何意義其實就是求取投影!所以坐標變換的幾何本質(剛才已經討論過其代數本質),就是把一個點分別投影到三根軸上去而已!

再仔細想一想,P1在XYZ三根軸上的投影,不正是它在新坐標系下的坐標嗎?這樣一來,坐標變換是不是就太容易理解了呢?

綜上理解得出:


推薦閱讀:

手機的裸眼3D功能是噱頭還是真的有特色?
3D動畫製作流程是怎樣的?
C4D COLORS 海報分析與製作
《侏羅紀公園》:無需節操的經典
哪些技術突破導致 3D 列印近些年來如此熱門?

TAG:3D |