赞
踩
变换矩阵 (Transformation Marices)
在图形学中的重要性不用多说,一切物体的
缩放
,
旋转
,
位移
,都可以通过变换矩阵作用得到。同时在
投影 (projection) 变换
的时候也有很多应用,本文将会介绍一些简要的变换矩阵。
我们将如下式所示的简单矩阵乘法定义为对向量
(
x
,
y
)
T
(x,y)^T
(x,y)T的线性变换。
[
a
11
a
12
a
21
a
22
]
[
x
y
]
=
[
a
11
x
+
a
12
y
a
21
x
+
a
22
y
]
缩放变换是一种沿着坐标轴作用
的变换,定义如下:
s
c
a
l
e
(
s
x
,
s
y
)
=
[
s
x
0
0
s
y
]
scale(s_x,s_y) =
该矩阵对带有笛卡尔分量的向量进行了变化,将所有的点变为
(
s
x
x
,
s
y
y
)
T
(s_xx,s_yy)^T
(sxx,syy)T。
[
s
x
0
0
s
y
]
[
x
y
]
=
[
s
x
x
s
y
y
]
.
示例1:均匀缩放
上图为将
x
x
x 和
y
y
y 均匀缩小2倍的矩阵,轴对齐的缩放矩阵具有比例,每个对角线元素的变化,而非对角线元素的变化为零。
示例2:非均匀缩放
此例将原图在水平方向上减半,在垂直方向上增加三倍。缩放矩阵是对角的,且为不相等元素。此时,时钟的方形轮廓变成了矩形,而圆形的面变成了矩形一个椭圆。
反射变换是一种基础的线性变换,我们可以通过上诉的缩放变换来反射任意坐标轴上的向量。
关于
y
y
y 轴反射可通过将所有
x
x
x 坐标乘以
−
1
-1
−1 来实现:
r
e
f
l
e
c
t
−
y
=
[
−
1
0
0
1
]
reflect-y=
关于
x
x
x 轴反射可通过将所有
y
y
y 坐标乘以
−
1
-1
−1 来实现:
r
e
f
l
e
c
t
−
x
=
[
1
0
0
−
1
]
.
reflect-x=
剪切变换
直观理解就是把物体一边固定,然后拉另外一边。水平和垂直剪切矩阵定义如下:
s
h
e
a
r
−
x
(
s
)
=
[
1
s
0
1
]
,
s
h
e
a
r
−
y
(
s
)
=
[
1
0
s
1
]
.
shear - x(s) =
s
h
e
a
r
−
x
(
s
)
shear - x(s)
shear−x(s)与
s
h
e
a
r
−
y
(
s
)
shear - y(s)
shear−y(s)分别对应了向"拉伸"x轴,和"拉伸"y轴。
示例1:水平剪切的转换
变换矩阵为:
s
h
e
a
r
−
x
(
s
)
=
[
1
1
0
1
]
.
shear - x(s) =
示例2:垂直剪切的转换
剪切矩阵使
y
y
y 轴点按其横坐标的比例向上移动变换矩阵为:
s
h
e
a
r
−
y
(
s
)
=
[
1
0
1
1
]
.
shear - y(s) =
在这两种情况下,被剪切的时钟的方形轮廓变成了一个平行四边形,被剪切的钟的圆形表面变成了椭圆形。
另一种考虑剪切的方法是只考虑垂直方向或水平方向的旋转轴。沿垂直轴顺时针旋转角度为
φ
\varphi
φ 的剪切矩阵为:
[
1
t
a
n
φ
0
1
]
.
同理,沿水平轴逆时针倾斜角度为
φ
\varphi
φ 的剪切矩阵为:
[
1
0
t
a
n
φ
1
]
.
假设需要让向量
a
a
a 逆时针旋转一个角度
ϕ
\phi
ϕ ,从而得到向量
b
b
b。若向量
a
a
a 与
x
x
x 轴的夹角为
α
\alpha
α ,则向量
a
a
a 的长度为
r
=
x
α
2
+
y
α
2
r = \sqrt{x_\alpha^2 + y_\alpha^2}
r=xα2+yα2
,且
{
x
α
=
r
c
o
s
α
y
α
=
r
s
i
n
α
由于向量
b
b
b 是向量
a
a
a 经过旋转得到的,故其长度同样为
r
r
r ,此时向量
b
b
b 与
x
x
x 轴夹角为
(
α
+
ϕ
)
(\alpha +\phi)
(α+ϕ)。使用三角变换得到:
x
b
=
r
c
o
s
(
α
+
ϕ
)
=
r
c
o
s
α
c
o
s
ϕ
−
r
s
i
n
α
s
i
n
ϕ
y
b
=
r
s
i
n
(
α
+
ϕ
)
=
r
s
i
n
α
c
o
s
ϕ
+
r
c
o
s
α
s
i
n
ϕ
x_b = rcos(\alpha+\phi) = rcos\alpha cos\phi - rsin\alpha sin\phi\\ y_b = rsin(\alpha+\phi) = rsin\alpha cos\phi + rcos\alpha sin\phi
xb=rcos(α+ϕ)=rcosαcosϕ−rsinαsinϕyb=rsin(α+ϕ)=rsinαcosϕ+rcosαsinϕ
已知
x
α
=
r
c
o
s
α
x_\alpha = rcos\alpha
xα=rcosα 和
y
α
=
r
s
i
n
α
y_\alpha = rsin\alpha
yα=rsinα,则向量
b
b
b 的坐标可改写为:
x
b
=
x
a
c
o
s
ϕ
−
y
a
s
i
n
ϕ
y
b
=
x
a
s
i
n
ϕ
+
y
a
c
o
s
ϕ
x_b = x_a cos\phi - y_a sin\phi\\ y_b = x_a sin\phi+y_a cos\phi
xb=xacosϕ−yasinϕyb=xasinϕ+yacosϕ
我们希望仅用一个变换矩阵表示将向量
a
a
a 旋转到向量
b
b
b ,根据上式,可写出该旋转变换矩阵为:
r
o
t
a
t
e
(
ϕ
)
=
[
c
o
s
ϕ
−
s
i
n
ϕ
s
i
n
ϕ
c
o
s
ϕ
]
.
rotate(\phi) =
旋转变换方程可写为:
[
x
b
y
b
]
=
[
c
o
s
ϕ
−
s
i
n
ϕ
s
i
n
ϕ
c
o
s
ϕ
]
[
x
a
y
a
]
.
示例:将原图逆时针旋转45°
,原点为旋转中心
[
c
o
s
π
4
−
s
i
n
π
4
s
i
n
π
4
c
o
s
π
4
]
=
[
0.707
−
0.707
0.707
0.707
]
为了通过 变换矩阵
实现图像的平移(Translation)
操作,我们引入一维新的坐标,称之为齐次坐标
。使
(
x
,
y
)
T
(x,y)^T
(x,y)T ->
(
x
,
y
,
1
)
T
(x,y,1)^T
(x,y,1)T。
最后一维为1时,
(
x
,
y
,
1
)
T
(x,y,1)^T
(x,y,1)T 表示一个二维坐标点, 最后一维为0时,
(
x
,
y
,
0
)
T
(x,y,0)^T
(x,y,0)T 表示一个二维向量。
此时即可用一个变换矩阵表示线性变换,且实现图像平移:
[
x
′
y
′
1
]
=
[
m
11
m
12
x
t
m
21
m
22
y
t
0
0
1
]
[
x
y
1
]
=
[
m
11
x
+
m
12
y
+
x
t
m
21
x
+
m
22
y
+
y
t
1
]
注意:
[ x y ω ]⎣⎡xyω⎦⎤的二维坐标点是 [ x / ω y / ω 1 ]⎡⎣⎢xyω⎤⎦⎥ ⎣⎡x/ωy/ω1⎦⎤⎡⎣⎢x/ωy/ω1⎤⎦⎥
参考
[1] Fundamentals of Computer Graphics 4th
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。