专栏首页小L的魔法馆Computer Graphics note(1):变换

Computer Graphics note(1):变换

文章目录

  • Computer Graphics note(1):变换
    • 2D变换
      • 1.Scale(缩放)
      • 2.Shear(切变)
      • 3.Rotate(旋转)
        • 旋转矩阵的性质
      • 4.Translation(平移) & 齐次坐标
    • 仿射变换(affline transformations)
      • 变换矩阵的结构性质
      • 齐次坐标下的变换矩阵
        • Scale:
        • Rotation:
        • Translation:
    • 其他变换
      • 1.Inverse Transform(逆变换)
      • 2.Composite transform(复合变换)
        • 结论
      • 3.Decomposite transform(变换分解)
    • 3D变换
      • 前提(右手系)
      • 齐次坐标表示
      • 变换矩阵的结构性质
      • 齐次坐标下的变换矩阵
        • Scale:
        • Translation:
        • Rotation

Computer Graphics note(1):变换

Games101清新脱俗,可惜没赶上直播。 官网:http://games-cn.org/intro-graphics/ 结合食用:Fundamentals of Computer Graphics (3rd Edition) or (2nd Edition)

2D变换

对于能写成X′=MX形式的变换,称为线性变换(Linear Transforms),其中M为变换矩阵。

1.Scale(缩放)

基本的缩放就是沿着坐标轴进行的缩放,而对于xy轴任意比例缩放Sx,Sy​而言,其数学形式如下:

转换为矩阵形式(x,y)^T左边的矩阵为变换矩阵)如下:

例如下图为沿着xy轴都缩放0.5:

水平镜像也属于缩放操作,即Sx=−1,Sy=1,其矩阵表示如下:

2.Shear(切变)

切变只变化一边,如下图所示:

可见,上面是变化了x轴,其矩阵形式如下:

同理,对于变化y轴,其矩阵形式如下:

3.Rotate(旋转)

对于旋转而言,前提是默认绕原点旋转,方向为逆时针。x轴转转向y轴。 对于一个向量a,其与x轴夹角为α假设要将其旋转角度φ得到向量b,如下图所示(图来源:Fundamentals of Computer Graphics (3rd Edition) 6.1.3Rotation):

其旋转矩阵如下:

推导过程1如下(来自Fundamentals of Computer Graphics (3rd Edition) 6.1.3Rotation): 假设向量a的长度为r,则有

而b是a旋转得到的,所以长度相同,而其旋转角度为(α+φ)(α+φ)(α+φ),则有

将上面的式子带入下面的式子可以得到如下结果:

所以最终的旋转矩阵如下:

推导过程2(课程提及,辅助理解记忆)如下

考虑旋转矩阵对于任意点都适用,所以考虑几个特殊点的转换:(1,0)−>(cosθ,sinθ),(0,1)−>(cosθ,−sinθ)。所以有下列关系:

从中可以得到如下结果,即为所求:

旋转矩阵的性质

考虑旋转R(−φ),会发现等于RφT​,如下所示:

而从定义上看,R(−φ)=Rφ−1​,所以可以得到Rφ−1=RφT​,即旋转矩阵的逆等于其转置矩阵,也就是说旋转矩阵为正交矩阵(数学意义)。

4.Translation(平移) & 齐次坐标

对于平移而言,即使考虑只有平移的情况,我们也只能写成如下形式: 对于平移:

为了让平移和上面的线性转换统一,引入齐次坐标。对于2D变换,增加一个维度w,此时规定点和向量的齐次坐标表示如下:

即对于齐次坐标而言,(x,y,w)T(w!=0)表示的点即为(xw,yw,1)T(\frac{x}{w},\frac{y}{w},1)^T 则对于平移而言,其矩阵形式表示变为:

这样一来形式就得到统一,并且使用齐次坐标还能保证以下操作的正确性:

而对于point+pointpoint+pointpoint+point原本是无意义的,但是在齐次坐标下也能引申出其他意义,即两点相加为其中点,推导过程如下:

仿射变换(affline transformations)

仿射变换 = 线性变换 +平移,即为

使用齐次坐标表示如下:

上面两者是等价的,所以仿射变换是先进行线性变换然后再进行的平移

变换矩阵的结构性质

值得一提的是,当表示的是2D仿射变换的时候,上面的变换矩阵才有如下性质

  1. 最后一行为001
  2. 最后一列的头两个数tx,ty​必然表示平移
  3. 左上角四个数(abcd)\begin{pmatrix}a&b \\ c & d\end{pmatrix}(ac​bd​)表示线性变换

齐次坐标下的变换矩阵

Scale:

Rotation:

Translation:

其他变换

1.Inverse Transform(逆变换)

逆变换即为原变换的相反操作,逆变换对应的变换矩阵即在数学意义上的逆矩阵,如下图中M−1M^{-1}M−1即为逆变换对应的变换矩阵,且逆矩阵有个基本性质,即MM−1=IMM^{-1}=IMM−1=I,其中III为单位矩阵。

2.Composite transform(复合变换)

以下图为例子,假如想要从左边变换到右边的话,可以考虑的方式有先旋转再平移,或者先平移再旋转。

两种方式结果如下:

很明显,需要先旋转再平移,上面的变换过程用矩阵表示如下:

结论

  1. 以变换的顺序很重要,顺序不同结果也就不同
  2. .变换矩阵应用的顺序是从右到左的

上述结论可以推广,即当有N个变换矩阵A1 An​应用时,也是从右到左进行应用,同时因为矩阵满足结合律,所以我们可以先将前面的所有变换矩阵相乘(Ar=An⋅⋅⋅A2A1),然后再应用,结果是不变的。如下:

值得一提的是由于矩阵都是3X3,所以即使前面的相乘,得到的矩阵Ar​仍然是3X3,也就是说一个矩阵也可以表示极为复杂的变换。

同时考虑仿射变换的性质,上面先旋转再平移也可以写成如下形式,结果不变:

3.Decomposite transform(变换分解)

变换的分解有多种多样,有时候不能一次性写出旋转矩阵,就可以将其分解,逐步应用变换矩阵来达到同样的效果。

例如考虑绕任意点ccc进行旋转,可以先将旋转中心移动到原点进行旋转之后再将旋转中心移动到ccc点。如下图所示:

其矩阵表示如下,应用过程从右到左: T(c)⋅R(α)⋅T(−c)

3D变换

前提(右手系)

以下变换考虑的都是右手系(参考右手螺旋定则,四指弯曲方向为x旋转到y方向,大拇指方向为z方向)。

齐次坐标表示

类比2D中引入齐次坐标的原因,3D中的平移也不能直接写成,所以对于3D变换,增加一个维度w,此时规定点和向量的齐次坐标表示如下:

同样的有对于齐次坐标而言,(x,y,z,w)T(w!=0)表示的点即为(xw,yw,zw,1)T(\frac{x}{w},\frac{y}{w},\frac{z}{w},1)^T

矩阵描述3D中的仿射变换如下:

变换矩阵的结构性质

和2D中一样,当表示的是3D仿射变换的时候,上面的变换矩阵才有如下性质

  1. 最后一行为0001
  2. 最后一列的头两个数tx,ty,tz必然表示平移
  3. 左上角9个数(abcdefghi)\begin{pmatrix}a&b&c \\ d&e&f \\ g&h&i \end{pmatrix}⎝⎛​adg​beh​cfi​⎠⎞​表示线性变换

齐次坐标下的变换矩阵

3D下和2D下的缩放和平移类似,但是旋转有些不同,

Scale:

Translation:

Rotation

先考虑只绕一轴进行旋转的情况(绕谁谁不变),如下:

这里绕着y轴有所不同,这是因为我们使用的右手系,旋转方向默认逆时针的情况下,绕y轴,是z转向x方向,而矩阵定义的旋转顺序为xyz,即为x->y,y->z,x->z。

接下来简单总结一下一般情况绕任意轴下的3D旋转。

普通的3D旋转可以将其分解到绕xyz旋转,然后推导其公式(Rodrigues′RotationFormula)如下,其中n为旋转轴,α为旋转角,I为单位矩阵,这里默认沿着n旋转时,该轴是过原点的:

最右边的是向量叉积的矩阵形式。推导略。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--I-填空题

    Enterprise_
  • 学生信息管理系统

    Enterprise_
  • POJ 2318--TOYS(二分找点,叉积判断方向)

    TOYS Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17974 ...

    Enterprise_
  • 强大的矩阵奇异值分解(SVD)及其应用

    PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。在上篇文章中便是基于特征值分解的一种解释。 特征值和奇异值在大部分人的印象中,...

    机器学习AI算法工程
  • 机器学习中的数学(6)-强大的矩阵奇异值分解(SVD)及其应用

    上一次写了关于PCA与LDA的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。在上篇文章中便是基于特征值分解的一种解释。 ...

    机器学习AI算法工程
  • 根据分组信息做差异分析- 这个一文不够的

    通过前面的讲解,我们顺利的了解了GEO数据库以及如何下载其数据,得到我们想要的表达矩阵,也成功的使用了GSEA这个分析套路。 历史目录: 解读GEO数据存放规律...

    生信技能树
  • h5ai服务器目录

    在前几天,我帮人安装h5ai这个东西,结果直接踩坑,装了一个下午,打算自己也装一个,顺便写一下教程 最终效果演示:

    huanhao
  • 在 iOS 微信浏览器中自动播放 HTML5 audio(音乐) 的正确方式

    原理: 在微信的JS-API 中 play 一下 audio 即可达到自动播放的目的(应该是微信自己做了处理)

    飞奔去旅行
  • Layui 颜色

    用户5760343
  • 【技术综述】人脸表情识别研究

    随着机器学习和深度神经网络两个领域的迅速发展以及智能设备的普及,人脸识别技术正在经历前所未有的发展,关于人脸识别技术讨论从未停歇。目前,人脸识别精度已经超过人眼...

    用户1508658

扫码关注云+社区

领取腾讯云代金券