从零开始图形学 | Matrix的线性变换和位移变换

在图形学中矩阵统一以列矩阵的形式呈现
比如一个单列矩阵

A1=\left[ \begin{matrix} a1\\ a2\\ a3 \end{matrix} \right]
3*3矩阵
A3=\left[ \begin{matrix} a1&b1&c1\\ a2&b2&c2\\ a3&b3&c3 \end{matrix} \right]
在此之前补一个Markdown如何写矩阵的内容,感谢原贴分享!
https://blog.csdn.net/qq_38228254/article/details/79469727

图片和内容均来自GAMES101,万分感谢大神的分享! http://games-cn.org/


进入正题

线性变换包含我们常说的【缩放】【斜切】【旋转】。

PS:这里我们以2D图像为例

缩放矩阵

系数为0.5的缩放矩阵

等比即为原坐标乘以比例系数

等比缩放的矩阵形式为

\left[ \begin{matrix} x' \\ y' \end{matrix} \right] = \left[ \begin{matrix} s&0\\ 0&s \end{matrix} \right] \left[ \begin{matrix} x\\ y \end{matrix} \right] = \left[ \begin{matrix} s*x + 0*y\\ 0*x + s*y \end{matrix} \right] \ = \left[ \begin{matrix} sx \\ sy \end{matrix} \right] \
从上可以看出,不等比缩放也同样适用以上矩阵变换。

不等比矩阵对应的两个s系数不同

另,镜像矩阵其实是缩放矩阵的一种特殊形式。
镜像矩阵是系数为-1的缩放矩阵

斜切矩阵

理解斜切矩阵

简单的理解,上图中的斜切矩阵,在y方向上没有变动,所以y' = y,在x方向上,所有的数值都向正方向移动了a,所以 x' = x + ax(注意这里a是倍数!)

旋转矩阵

需要注意的是,旋转矩阵通常默认都是以坐标原点作为pivot,旋转方向为逆时针(CCW)。

旋转矩阵的简单推导验证


旋转矩阵的工作原理

取方形右下角{1, 0},旋转后坐标为{cosθ, sinθ},得出矩阵中 A = cosθ,C = sinθ;
相应的,取左上角{0, 1},旋转后的坐标为(-sinθ, cosθ),得出矩阵中 B = -sinθ,D = cosθ。

二维旋转矩阵

到这里其实已经发现了线性变换的共性,即[目标坐标] = [矩阵]*[当前坐标]


线性变换公式

以上都是解决围绕原点的问题,假如要实现如下的位移变换呢?

在 x 和 y 方向上位移t

此时回顾一下线性变换矩阵
\left[ \begin{matrix} x' \\ y' \end{matrix} \right] = \left[ \begin{matrix} a&b\\ c&d \end{matrix} \right] \left[ \begin{matrix} x\\ y \end{matrix} \right] = \left[ \begin{matrix} a*x + b*y\\ c*x + d*y \end{matrix} \right] \
会发现无论在任何情况下,都无法得到以上位移变换,也就是说,位移变换并不是线性变换!
位移变换是线性变换和位移向量共同作用的结果

那么有没有办法依然能够通过 [单一矩阵]*[坐标] 的形式来同时描述位移变换呢?有!这里我们要引入齐次坐标。

齐次坐标 w

齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为p' =M*p的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。
结合之前的案例,相当于在原本2*2的矩阵上再增加一个维度变为3*3,返回结果如下


返回结果正是想要的位移变换

这时候考虑到向量的平移是不会变的,所以点的平移和向量的平移要区别对待,即



简单理解,当齐次坐标补位值为1,则为向量,0则为点。
含有齐次坐标的运算法则

如果出现两个点相加为2,则/2进行归一化处理,返回值为笛卡尔坐标系中的中点坐标。

那么,我们常规意义上的仿射变换就可以统一用如下矩阵来表示:


仿射变换转变为等效的齐次坐标矩阵

所以,这里就可以解释为什么要用4*4的矩阵来描述三维空间内的转换了。

如何解读矩阵?
二维矩阵增加齐次坐标后的解读
逆变换
逆变换工作原理

简单的理解,逆变换就像是逆向动力学,而求逆矩阵的方法也很简单,矩阵和逆矩阵相乘结果为单位矩阵。

M*M-1=\left[ \begin{matrix} 1&0&0\\ 0&1&0\\ 0&0&1 \end{matrix} \right]

矩阵变换次序很重要!!!

先平移后旋转VS先旋转后平移

由于旋转矩阵始终是以原点为轴心,先平移后旋转会出现不合理的位移,所以矩阵一定是先旋转,后平移。



另外,由于行列式特殊的计算方式,矩阵相乘是不满足交换律的。但是!多矩阵相乘可以添加在左侧,如下

多矩阵相乘

从这个角度看,矩阵的结合律其实就相当于左乘,复杂的矩阵变换就可以变成 矩阵变换互相作用*坐标

矩阵结合率

一个思考

如何让一个物体围绕一个特定的点来旋转??

围绕特定点的矩阵旋转原理

核心是要拆分运动,首先使用位移矩阵挪到原点,然后作用旋转矩阵,最后再用反向位移矩阵恢复坐标c,完成!
整个过程中的核心是对旋转点c的定义。

相应的,在三维坐标中添加齐次坐标后就是我们常说的4*4矩阵了,作用方式同上述二维空间变换。


三维空间中的4*4矩阵

一个思考!

了解到旋转矩阵的使用方法后,此时如果有图像逆时针旋转θ角,则为
Rθ=\left( \begin{matrix} cosθ&-sinθ\\ sinθ&cosθ \end{matrix} \right)

那么旋转-θ呢?(画个图看一下就能推出来了)
R=\left( \begin{matrix} cosθ&sinθ\\ -sinθ&cosθ \end{matrix} \right)

此时观察两个矩阵之间的关系,得出旋转-θ的矩阵就是旋转θ的转置(行列对换)
R = RθT

另,根据定义,旋转-θ的和旋转θ应该是互逆的,也就是
R = Rθ-1
所以得出最终结论====>

旋转矩阵的逆 = 旋转矩阵的转置

Rθ-1 = RθT

也就是常说的正交矩阵。

三维呢?

类似的,在三维状态下的矩阵,也需要齐次坐标

三维中的齐次坐标

三维中的缩放和平移

然而在旋转矩阵中,情况有所不同
Y轴旋转有所不同

为什么Ry和其他两个轴不一致?
因为在三维状态下,按照右手螺旋定则,如果是X*Z,得到的是Y方向的反方向,所以需要取-θ。
刚刚在二维空间中已经论证过了旋转θ和-θ的转置和互逆关系,所以Y轴旋转需要求转置矩阵。

传说中的欧拉角旋转

复杂旋转的合成

然而,有一种特殊情况,是欧拉角的bug——Gimbal Lock(万向节死锁)。
简单的理解,因为旋转矩阵的计算方式是有次序的(通常是以zyx为顺序而不是xyz),动态欧拉角会出现两个旋转轴在某个过程中重合的情况,此时就会有一个维度的消失。
在这个链接中有详细且直观的解释https://v.youku.com/v_show/id_XNzkyOTIyMTI=.html
另,一种旋转状态可能对应多种欧拉角甚至无数种。
虽然起点和结果相同,但是中间的插值计算导致了万向节锁死就会出现尴尬时刻

所以也就有了罗德里格斯旋转公式


image.png

以及

大恶魔——“四元数”Quaternion!

关于四元数需要太多的先导学习,需要一整节来整理。
先来一个网站https://eater.net/quaternions
非常交互式的理解四元数,非常非常推荐阅读观看!

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

推荐阅读更多精彩内容