2D Transformation
通过特定点就可以计算出变换矩阵。
缩放
原坐标为
[
x
,
y
]
T
[x,y]^T
[x,y]T,则做如下缩放变换后可得到
x
′
=
s
x
x'=sx
x′=sx,
y
′
=
s
y
y'=sy
y′=sy。
写为矩阵形式
通过改变s的取值,可以达到不同效果,也可实现两个轴不同缩放比例的效果。
镜像
![](https://i-blog.csdnimg.cn/blog_migrate/348f0a974a45807c25646195a73fd83f.png)
剪切
类似于四边形不稳定的性质,将任意一边拉长,方形变平行四边形。
旋转
![](https://i-blog.csdnimg.cn/blog_migrate/de9d3adc49f6133e28a5624918baa3f9.png)
分别使用点(1,0)和(0,1)变换前后的坐标可以得到旋转矩阵。
旋转矩阵是正交矩阵,即它的逆等于它的转置。 R − θ = R θ − 1 = R θ T R_{-θ} = R_θ^{-1}=R_θ^T R−θ=Rθ−1=RθT
齐次坐标
引入原因
以上所有变换为线性变换,可以表示为如下形式。
而平移变换是给向量加上一个值,不能表示为如上形式的矩阵乘法。
为了使用一个矩阵来完成所有变化,引入了齐次坐标的概念。
齐次坐标
给坐标添加一个维度。
- 2D point = ( x , y , 1 ) T (x,y,1)^T (x,y,1)T
- 2D vector = ( x , y , 0 ) T (x,y,0)^T (x,y,0)T
- 3D point = ( x , y , z , 1 ) T (x,y,z,1)^T (x,y,z,1)T
- 3D vector =
(
x
,
y
,
z
,
0
)
T
(x,y,z,0)^T
(x,y,z,0)T
则平移变换可以表示为
这样的定义方式满足了一些性质:
其中
p
o
i
n
t
+
p
o
i
n
t
point+point
point+point最后一个维度变为2,而在齐次坐标中
(
x
,
y
,
w
)
(x,y,w)
(x,y,w)是一个二维的点,其点坐标为
(
x
/
w
,
y
/
w
)
T
(x/w,y/w)^T
(x/w,y/w)T。因此
p
o
i
n
t
+
p
o
i
n
t
point+point
point+point得到的是这两个点的中点。
仿射变换
仿射变换 = 线性变换 + 平移变换
在齐次坐标下,各个变换可以表示为:
![](https://i-blog.csdnimg.cn/blog_migrate/56d6fe6ca2215ff567ff47ede737ec99.png)
逆变换
![](https://i-blog.csdnimg.cn/blog_migrate/e51e9f6b836c75bd4b95185f2bf0ca46.png)
变换组合
将变换组合起来可以实现各种效果,但是组合顺序非常的重要,因为矩阵乘法不满足交换律。
比如下图上面是先平移后旋转得到的效果,下面是先旋转后平移得到的效果。
先旋转45°,后沿x轴进行平移的矩阵如下:
推广开来,若干个变换表示如下:
怎样按照一个给定的点旋转物体?
3D 变换
![](https://i-blog.csdnimg.cn/blog_migrate/c5e4098fb1ba3478c4d43ea4582e4a1a.png)