龙空技术网

矩阵变换—仿射变换和齐次坐标

Thepoly 235

前言:

此刻同学们对“怎么把坐标用矩阵形式表达”大约比较讲究,朋友们都想要学习一些“怎么把坐标用矩阵形式表达”的相关内容。那么小编在网络上收集了一些有关“怎么把坐标用矩阵形式表达””的相关资讯,希望咱们能喜欢,姐妹们快快来学习一下吧!

[Tip]: 齐次向量[x y z w]T ,w = 0时,该齐次向量表示一个点。w = 0时,则表示向量。

仿射变换

1.缩放变换和旋转变换称为线性变换(linear transform)

2.线性变换和平移变换统称为仿射变换(affine transfrom)

3.投影变换所用到的变换则称为射影变换

齐次坐标

1.齐次坐标是用N + 1个数来表示N 维坐标的一种方式。

2.如三维矩阵无法通过右乘进行平移变换,将三维坐标扩展成四维齐次坐标。

2D矩阵

通过上图,可以构建如下矩阵:

3D矩阵

缩放

三维空间的缩放可以用3X3的矩阵 M_scale 表示(1-1):

1.scaleX ,scaleY ,scaleZ 分别表示沿着x,y,z轴方向上的缩放系数。如果全部缩放系数都相等, 那么该缩放操作称为均匀缩放,否则,称为非均匀缩放。

2.Unity中使用列向量和列矩阵描述顶点信息,所以可以把顶点坐标右乘缩放矩阵实现缩放操作。

旋转

1.在Unity里面,我们约定旋转顺序是先Z轴,再X轴,最后Y 轴,但是由于我们旋转会导致向量基方向变化,所以如果按照上面的顺序是有问题的,所以只要反过来写:先Y 轴,再X轴,最后Z轴。

2.要定义一个旋转操作,需要定义对应的旋转轴。当某向量分别绕着坐标系的xyz旋转θ角度时,分别 用以下旋转矩阵Mr_x ,Mr_y ,Mr_z 表示:

代码举例:自定义灯光旋转

构建旋转矩阵

构建灯光

平移

与缩放旋转不同,平移是一个加法操作。平移变换不是一个线性操作。

因为用右乘一个三阶矩阵实现对一个三维向量进行平移变换是不可能实现的。要解决这个问题,需要使用齐次坐标。

将三维向量[x y z]T 扩展成一个四维其次坐标[x y z w]T 。将平移向量扩展成为四阶矩阵的形式。

旋转与缩放矩阵也可以通过增加第4列与第4行的方式将矩阵四阶化。

仿射变换的原理就在这里了,有问题欢迎大家指正。

标签: #怎么把坐标用矩阵形式表达