3D to 2D 投影
下图是一个投影变化实例
2D 变换
Scale
缩放可以用矩阵乘法表现。
反射 Reflection Matrix 镜像
对一个轴做镜像
切变 Shear Matrix
切变的的矩阵表现
旋转 Rotate
旋转的矩阵表示,旋转默认是围绕(0,0)点,逆时针旋转。
推倒过程
线性变换 Linear Transforms = Matrices
前面说的都是线性变化,一个矩阵乘上一个输入坐标,得到一个结果坐标的变化,都是线性变换。
齐次坐标 Homogeneous Coordinates
平移 Translation
平移是典型的非线性变换,如下图所示,无法写成一个矩阵乘上一个向量的方式。
我们不想让平移成为一个特例,我们试图找到一个方法,能够表示所有的变换,包括平移和旋转,缩放等。
解决方案就是 【齐次坐标】
首先对于任意一个二维的点,增加一个维度1,任意一个二维向量,增加一个维度0,具体加0还是1,取决于你准备用这个坐标表示一个点还是一个向量。
因为向量具有平移不变性,所以向量后面要加0,因为这样(x,y)平移之后,会是(x,y,0)表达的还是(x,y)的方向。
如上图,这样就变成了一个矩阵*一个向量的形式表达平移变换了。
向量+向量=向量
点-点=从被减数指向减数的一个点
点+向量=一个点沿着一个向量移动,移动到了一个新的点上,所以得到一个点
点+点=这两个点的中间点 (举个例子:(2,2,1)+(1,1,1)=(3,3,2)=>(1.5,1.5,1))
在齐次坐标下,当w不为0时,一个点可以表示为下图。
仿射变换
前面所说的平移,采用一个矩阵x一个向量再加上一个向量得到的平移结果为仿射变换,仿射变换都可以用齐次坐标表示
齐次坐标表达2D变换
缩放,旋转和平移
逆变换
逆变换是讲一个变换倒转回去恢复到之前的样子。在数学上表现为乘以这个矩阵的逆矩阵。矩阵乘以逆矩阵为单位矩阵,也就代表着什么都没做过。
组合变换
组合变换的顺序很重要,因为变换使用矩阵乘法表示,矩阵乘法不满足于交换律。 先旋转45度,再平移x轴一个单位的组合变换的公式表现:
这里需要注意的是,矩阵是从右到左应用的。
更多的组合变换,先A1,再A2,然后A3.....可以用下图表示:
分解变换
主要用于解决一些更加复杂的变换,如下图表示的是如何围绕一个给定点C做变换,而不是根据围绕原点做变换。
先将C点移动到原点,进行-c平移,然后旋转α,再从原点平移到C带你,进行c平移。
具体计算过程
3D 变换
3D变换的齐次坐标依然是在向量末尾加0,点末尾加1.
通常情况下,(x,y,z,w)(w!=0)就表示这样一个3d的点(x/w,y/w,z/w)。
使用4*4矩阵表达3D仿射变换