仿射空间中几种基本映射的矩阵表述

用矩阵表述变换与齐次坐标一文中我们了解了旋转、平移的矩阵表述。在这里,我们试着总结一下仿射空间中其他几种映射的矩阵表述。

为了方便观察,在这里我们仅讨论二维空间中的基本变换。对于每一个变换,我们采取方程组,坐标系图,矩阵分别描述,便于理解。

一、旋转

旋转在几何和线性代数中是描述刚体围绕一个固定点的运动的在平面或空间中的变换。

需要注意,在这里我们只讨论比较常用的“坐标系保持不动,向量绕坐标轴旋转”观点。

对于给定点P(x, y, z),计算其绕Z轴逆时针旋转\alpha ^\circ后新的坐标P'(x', y', z')。如下图所示:

旋转

由于涉及到角度,我们可以把笛卡尔坐标系转换为极坐标系,设r为极半径。则P点坐标为
\left\{ \begin{array}{l} x = r \cdot cos\beta \\ y = r \cdot sin\beta \\ z = z \end{array} \right. \tag 1
相应的,P'点坐标为
\left\{ \begin{array}{l} x' = r \cdot cos(\alpha + \beta) \\ y' = r \cdot sin(\alpha + \beta) \\ z' = z \end{array} \right. \tag2
由方程组(1)、(2)可知,P'关于x, y的方程为:
\left\{ \begin{array}{l} x' = x \cdot cos\alpha - y \cdot sin\alpha \\ y' = x \cdot sin\alpha + y \cdot cos\alpha \\ z' = z \end{array} \right. \tag3
用4x4矩阵可以表述为:
\left\{ \begin{matrix} x' \\ y' \\ z' \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} cos\alpha & -sin\alpha & 0 & 0\\ sin\alpha & cos\alpha & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} x \\ y \\ z \\ 1 \end{matrix} \right\} \tag4
即,三维旋转变换矩阵为:
\left\{ \begin{matrix} cos\alpha & -sin\alpha & 0 & 0\\ sin\alpha & cos\alpha & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\}

同样的方法,我们可以得出下面几种常见的旋转变换矩阵:
\begin{array}{c} \left\{ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & cos\alpha & -sin\alpha & 0\\ 0 & sin\alpha & cos\alpha & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} & \left\{ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & cos\alpha & sin\alpha & 0\\ 0 & -sin\alpha & cos\alpha & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \\[2ex] \text{点$P$绕X轴逆时针旋转$\alpha^\circ$} & \text{点$P$绕X轴顺时针旋转$\alpha^\circ$} \\[2ex] \left\{ \begin{matrix} cos\alpha & 0 & -sin\alpha & 0\\ 0 & 1 & 0 & 0\\ sin\alpha & 0 & cos\alpha & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} & \left\{ \begin{matrix} cos\alpha & 0 & sin\alpha & 0\\ 0 & 1 & 0 & 0\\ -sin\alpha & 0 & cos\alpha & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \\[2ex] \text{点$P$绕Y轴逆时针旋转$\alpha^\circ$} & \text{点$P$绕Y轴顺时针旋转$\alpha^\circ$} \\[2ex] \left\{ \begin{matrix} cos\alpha & -sin\alpha & 0 & 0\\ sin\alpha & cos\alpha & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} & \left\{ \begin{matrix} cos\alpha & sin\alpha & 0 & 0\\ -sin\alpha & cos\alpha & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \\[2ex] \text{点$P$绕Z轴逆时针旋转$\alpha^\circ$} & \text{点$P$绕Z轴顺时针旋转$\alpha^\circ$} \end{array}

二、缩放

缩放在欧式空间中是描述延某一方向或所有方向按照一定缩放因子放大或者缩小物体的线性变换。

我们通常讨论物体延一个或多个坐标轴方向的缩放,每一个坐标轴方向都有其单独的缩放因子。

当所有坐标轴方向的缩放因子一样时,此时的缩放叫做均匀缩放位似变换。均匀缩放的结果在几何意义上相似于原始物体。

当各坐标轴方向的缩放因子不同时,缩放后结果的形状可能发生变化,此时的缩放被叫做方向缩放

对于给定物体中某一点P(x, y, z),计算其均匀缩放m(m>1时为放大, 0<m <1时为缩小)后的结果P'(x', y', z')

在这里,我们讨论的是三维空间的均匀缩放。但是为了便于观察,我使用了二维平面的均匀缩放的图示。


缩放

如图所示,我们已知点P(x, y, z)的坐标,则P'(x', y', z')坐标可表示为
\left\{ \begin{array}{l} x' = mx \\ y' = my \\ z' = mz \end{array} \right. \tag5
用4x4矩阵表示为
\left\{ \begin{matrix} x' \\ y' \\ z' \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} m & 0 & 0 & 0 \\ 0 & m & 0 & 0 \\ 0 & 0 & m & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} x \\ y \\ z \\ 1 \end{matrix} \right\} \tag 6
即,三维缩放变换矩阵为:
\left\{ \begin{matrix} m & 0 & 0 & 0 \\ 0 & m & 0 & 0 \\ 0 & 0 & m & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right \}
同样的方法,我们可以得出下面几种常见的缩放变换矩阵(缩放因子m):
\begin{array}{c} \left\{ \begin{matrix} m& 0 & 0 & 0\\ 0 & m & 0 & 0\\ 0 & 0 & m & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} & \left\{ \begin{matrix} m & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \\[2ex] \text{均匀缩放} & \text{X轴方向缩放} \\[2ex] \left\{ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & m & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} & \left\{ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & m & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \\[2ex] \text{Y轴方向缩放} & \text{Z轴方向缩放} \end{array}

三、平移

平移在仿射空间中指物体延同一方向移动相同距离的变换。

平移是一种等距同构的变换,它可以被视为某一向量施加于物体每一点的结果。即,设v是已知向量,P为空间中一点,则平移
T_v(P) = P + v \tag7
对同一物体的多次连续平移,其结果可用一次平移表示,它符合向量的加法法则。即
T_v(T_u(P)) = T_{v+u}(P) \tag8

对于给定点P(x, y, z),计算施加向量v(\Delta x, \Delta y, \Delta z)的平移结果P'(x', y', z')

同样,为了便于观察,我们使用二维空间的平移图示。如下图:


平移

如图所示,我们已知点P(x, y, z)的坐标,则点P'(x', y', z')坐标可表示为
\left\{ \begin{array}{l} x' = x + \Delta x \\ y' = y + \Delta y \\ z' = z + \Delta z \end{array} \right. \tag 9
用4x4矩阵表示为
\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\} \cdot \left\{ \begin{matrix} x \\ y \\ z \\ 1 \end{matrix} \right\} \tag{10}
即平移变换矩阵为
\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\}

四、反射

反射在仿射空间中指把物体变换成它的镜像的映射。

需要注意,这里的反射与渲染阶段的光线“反射”不是同一个概念。这里是指数学意义上的反射。

对于给定点P(x, y, z),计算其针对x-z平面的镜像结果。如下图所示:

反射

由上图可以很容易得到,P'(x', y', z')关于xyz的方程组
\left\{ \begin{array}{l} x' = x \\ y' = -y \\ z' = z \end{array} \right. \tag{11}
用4x4矩阵表示为
\left\{ \begin{matrix} x' \\ y' \\ z' \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} x \\ y \\ z \\ 1 \end{matrix} \right\} \tag{10}
P(x, y, z)针对平面x-z的反射映射矩阵为
\left\{ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right \}
同样可以得出以下一些常见的反射变换矩阵
\begin{array}{c} \left\{ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} & \left\{ \begin{matrix} -1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} & \left\{ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & -1 & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \\[2ex] \text{针对平面$x-y$反射} & \text{针对平面$y-z$反射} & \text{针对平面$x-z$反射} \end {array}

五、投影

投影是指一个从向量空间V映射到它自身的线性变换。

投影是生活中“平行投影”概念的形式化和一般化。例如,在现实生活中,阳光照射物体在地面留下的影子。我们假设阳光是沿着同一方向(平行且垂直于地面的)照射物体,地面是严格的平面。那么,这就是投影最直观的例子。

对于给定点P(x, y, z),计算其在平面y-z上的投影点P'(x', y', z')。如下图:

投影

根据上图,可得关于,,的方程组:

用4x4矩阵表述为

即某点在平面上的投影变换矩阵为

类似的,我们可以得到如下常见的投影矩阵

六、错切

错切是在某方向上,按照一定的比例(错切因子)对图形的每个点平移得到的平面图形。移动的距离与该点到平行于该方向的某一直线的有向距离成正比。

错切

如上图所示,直线P'D是直线PD在平行于X轴方向上绕Z轴的错切。

此时,点P(x, y, z)经过错切的结果点P'(x', y', z')关于xyz的方程组为

\left\{ \begin{array}{l} x' = x + my,& \text{$m$为缩放因子} \\ y' = y \\ z' = z \end{array} \right. \tag{11}
用4x4矩阵表述为
\left\{ \begin{matrix} x' \\ y' \\ z' \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} 1 & m & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} x \\ y \\ z \\ 1 \end{matrix} \right\} \tag{12}
即水平方向(平行于X轴方向)上的错切变换矩阵为
\left\{ \begin{matrix} 1 & m & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\}

相应的,我们可以算出一下几种常见的错切变换矩阵(m为错切因子):
\begin{array}{c} \left\{ \begin{matrix} 1 & m & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} & \left\{ \begin{matrix} 1 & 0 & m & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \\[2ex] \text{平行于X轴方向绕Z轴的错切} & \text{平行于X轴方向绕Y轴的错切} \\[2ex] \left\{ \begin{matrix} 1 & 0 & 0 & 0\\ m & 1 & 0 & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} & \left\{ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & m & 0\\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \\[2ex] \text{平行于Y轴方向绕X轴的错切} & \text{平行于Y轴方向绕Z轴的错切} \\[2ex] \left\{ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ m & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} & \left\{ \begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & m & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} \right\} \\[2ex] \text{平行于Z轴方向绕X轴的错切} & \text{平行于Z轴方向绕Y轴的错切} \\[2ex] \end {array}

七、总结

上面我们已经了解了反射空间几种基本变换的矩阵表述。下面我们来重新整理一下,首先看如下适用于列向量的4x4矩阵。
A = \left[ \begin{array}{ccc|c} a & b & c & x \\ d & e & f & y \\ g & h & i & z \\ \hline l & m & n & w \end{array} \right]
我们可以很容易地发现,对于矩阵A

元素\{a,b,c,d,e,f,g,h,i\}与线性变换有关;

元素\{x, y, z\}与仿射变换有关。

那么,元素\{l, m, n\}有什么作用呢?

其实,这三个元素与透视投影变换有关。用矩阵表述变换是不是非常神奇?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容

  • 1 前言 OpenGL渲染3D模型离不开空间几何的数学理论知识,而本篇文章的目的就是对空间几何进行简单的介绍,并对...
    RichardJieChen阅读 6,917评论 1 11
  • 线性代数在科学领域有很多应用的场景,如下: 矩阵,是线性代数中涉及的内容, 线性代数是用来描述状态和变化的,而矩阵...
    zhoulujun阅读 11,970评论 3 44
  • 变换(Transformations) 我们可以尝试着在每一帧改变物体的顶点并且重设缓冲区从而使他们移动,但这太繁...
    IceMJ阅读 4,081评论 0 1
  • #金句第13条# 减肥ᕙ(`´)ᕗ一两周,有些成效就大吃大喝奖励自己;学习努力一学期,发现得心应手就换个领域努力;...
    Ariel元阅读 131评论 0 0
  • 属性(类,结构体或枚举中,某一个成员变量,就是该类,结构体或枚举的属性)存储属性 存在于类,结构体中,枚举中不存在...
    阿丶伦阅读 333评论 0 0