用矩阵表述变换与齐次坐标

一、线性变换与仿射变换的概念

我们知道在计算机图形学中,变换通常包含线性变换、仿射变换、透视变换等。并且,我们用4x4的矩阵表述变换,同时引入了齐次坐标。那么,为什么会这样呢?

在讨论这个问题之前,我们需要了解一下线性变换和仿射变换的定义。

线性映射:在两个向量空间之间的一种保持向量加法和标量乘法的特殊映射。

线性变换种类较多,通常有旋转、缩放、错切、镜像等。

仿射映射:指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。

二、用方程组表述线性变换与仿射变换

首先,我们讨论一下线性变换。由于线性变换种类较多,这里仅讨论最常见的旋转变换

在三维笛卡尔坐标系Oxyz中,我们如何得到点P(x, y, z)绕Z轴逆时针旋转α度后新的坐标P'(x', y', z')

由于是绕Z轴旋转,我们可以轻易地把笛卡尔坐标系转换为Oxy平面上的极坐标系Orr为半径坐标。假设点P与X轴夹角为\theta,我们可以得到P'关于xy的方程(此处z不用考虑)。

\left\{ \begin{array}{c} x = r \cdot cos\theta \\ y = r \cdot sin\theta \\ \end{array} \right. \tag1

\left\{ \begin{array}{l} x' = r \cdot cos(\theta + \alpha) \\ y' = r \cdot sin(\theta + \alpha) \\ z' = z \end{array} \right. \tag2
由方程组(1)和方程组(2)可以得出:
\left\{ \begin{array}{l} x' = x \cdot cos\alpha - y \cdot sin\alpha \\ y' = y \cdot cos\alpha + x \cdot sin\alpha \\ z' = z \end{array} \right. \tag 3
接下来我们讨论一下仿射变换中的特例:平移

思考一个问题:在三维笛卡尔坐标系Oxyz中,我们如何平移一个点P(x, y, z)?很简单,我们只需要将每一个坐标分量和对应的偏移量相加即可。
\left\{ \begin{array}{c} x' = x + \Delta x \\ y' = y + \Delta y \\ z' = z + \Delta z \\ \end{array} \right. \tag4

三、用矩阵表述线性变换和仿射变换

如果我们仅仅做单次的旋转或者平移,上面的方程组已经足够了。然而,在实际的项目当中,我们通常需要做复杂的连续的变换操作。如果还用这种方程组的办法,大量的计算不论是对开发人员还是计算机都是一种不必要的负担。因此,寻找一种更加方便计算的方法是无比迫切的事情。联系到矩阵与方程组的关系,以及矩阵乘法的本质,矩阵表述变换由此变得自然。

因此,旋转变换方程组可以由矩阵表述为:
\left\{ \begin{matrix} x' \\ y' \\ z' \end{matrix} \right\} = \left\{ \begin{matrix} cos\alpha & -sin\alpha & 0 \\ sin\alpha & cos\alpha & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} x\\ y\\ z \end{matrix} \right\} \tag 5
由式(5)可以得出,旋转变换是一个3x3矩阵(设为M)与点P的乘积结果。即:
f(p) = M \cdot P \tag 6
如果有多线性变换,其结果为:
\begin{align} f(p) & = M_1 \cdot (M_2 \cdot (M_3 \cdot P)) \\ & = (M_1 \cdot M_2 \cdot M_3) \cdot P &\text{根据矩阵乘法结合律} \\ & = M \cdot P \end{align} \tag7
同理,平移变换可以由矩阵表述为:
\left\{ \begin{matrix} x'\\ y'\\ z'\\ \end{matrix} \right\} = \left\{ \begin{matrix} x\\ y\\ z\\ \end{matrix} \right\} + \left\{ \begin{matrix} \Delta x\\ \Delta y\\ \Delta z\\ \end{matrix} \right\} \tag8

四、为什么是4x4矩阵?

很遗憾,平移无法用3x3矩阵与向量的乘法来计算。也就是说,3x3矩阵不能使投影变换的计算变得简单方便。

什么样的矩阵才能同时表述线性变换和平移?

回过头去重新审视方程组(3)、(4),上面的问题变成了什么样的矩阵能够同时表达方程组(3)、(4)。

考虑为了同时满足方程组(3)、(4),我们可以构造一个特殊的方程组:
\left\{ \begin{array}{l} x' = cos\alpha \cdot x - sin\alpha \cdot y + \Delta x \\ y' = sin\alpha \cdot x + cos\alpha \cdot y + \Delta y \\ z' = z + \Delta z \end{array} \right. \tag9
这个方程组是一次旋转与一次平移的结合。然而,方程组中存在常量,我们如何用矩阵乘法来表述这个非齐次方程组呢?

我们可以把它看作一个四元齐次式,其中新增一个分量w用来表示偏移量:
\left\{ \begin{array}{l} \Delta x = a \cdot w ,& \text{$a \neq 0$} \\ \Delta y = b \cdot w ,& \text{$b \neq 0$} \\ \Delta z = c \cdot w ,& \text{$c \neq 0$} \end{array} \right. \tag {10}
由方程组(9)、(10)可知:
\left\{ \begin{array}{l} x' = cos\alpha \cdot x - sin\alpha \cdot y + a \cdot w \\ y' = sin\alpha \cdot x + cos\alpha \cdot y + b \cdot w \\ z' = z + c \cdot w \\ w' = w \end{array} \right. \tag {11}
现在,我们可以用4x4矩阵来表述方程组(11):
\left\{ \begin{matrix} x' \\ y' \\ z' \\ w' \end{matrix} \right\} = \left\{ \begin{matrix} cosα & -sinα & 0 & a\\ sinα & cosα & 0 & b\\ 0 & 0 & 1 & c \\ 0 & 0 & 0 & 1 \end{matrix} \right\}· \left\{ \begin{matrix} x\\ y\\ z \\ w \end{matrix} \right\} \tag {12}
此时,我们已经可以用4x4矩阵同时表述旋转与平移。代价是我们新增了一个分量w

五、齐次坐标

上面提到的三位点P额外添加一个分量w组成的四元组,其实就是齐次坐标。那么,我们如何用齐次坐标表示三维的点呢?

事实上,齐次坐标(x, y, z, w) \Leftrightarrow 三维坐标 (x/w, y/w, z/w)w \neq 0

六、齐次坐标如何区分向量与点

由方程组(10)、(12)中,当w=1\alpha = 0^\circ时,
\left\{ \begin{matrix} x' \\ y' \\ z' \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} 1 & 0 & 0 & \Delta x \\ 0 & 1 & 0 & \Delta y \\ 0 & 0 & 1 & \Delta z \\ 0 & 0 & 0 & 1 \end{matrix} \right\}· \left\{ \begin{matrix} x\\ y\\ z \\ 1 \end{matrix} \right\} \tag{13}
这就是点P的平移变换。

我们也知道,线性变换是发生在两个向量空间之间的,也就是说,一个向量经过线性变换会生成一个新的向量。而向量是没有位置的,所以向量没有平移变换。为了使得平移对向量无效,此时,w = 0

由方程组(10)、(12)可知,当w=0时,三维向量的旋转变换矩阵表述为
\left\{ \begin{matrix} x' \\ y' \\ z' \\ 0 \end{matrix} \right\} = \left\{ \begin{matrix} cos \alpha & -sin \alpha & 0 & \Delta x \\ sin \alpha & cos \alpha & 0 & \Delta y \\ 0 & 0 & 1 & \Delta z \\ 0 & 0 & 0 & 1 \end{matrix} \right\}· \left\{ \begin{matrix} x\\ y\\ z \\ 0 \end{matrix} \right\} \tag {14}
由方程式(13)、(14)可知,齐次坐标可以很好的区分向量和点。即,(x, y, z, 1)是点,(x, y, z, 0)是向量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 线性代数在科学领域有很多应用的场景,如下: 矩阵,是线性代数中涉及的内容, 线性代数是用来描述状态和变化的,而矩阵...
    zhoulujun阅读 11,970评论 3 44
  • 理解矩阵一:转载自:http://blog.csdn.net/myan/article/details/64751...
    jiandanjinxin阅读 1,525评论 1 15
  • 如果不熟悉线性代数的概念,要去学习自然科学,现在看来就和文盲差不多。”,然而“按照现行的国际标准,线性代数是通过公...
    Drafei阅读 1,534评论 0 3
  • 漂亮的盆景欣赏电话13516132351张丽鹏
    老窦阅读 186评论 0 0
  • 《心事》 我的眼睛朦胧了月 朦胧了灯 我的心事深刻又繁纷 我的心事深刻又繁纷 解开这桩 还有那桩 还有那桩 复增一...
    黄开兵阅读 245评论 0 0