Transcript Document
第2章 计算机图形处理技术
1
2
2.2图形变换
在计算机图形处理中,经常需要对已经生成的图形进行
几何变换处理。例如,改变图形的大小、移动图形或根据
需要将图形旋转一个角度,输出零件的三面视图,显示立
体图,或要求一物体绕一轴线作连续的动态转动,使观察
者能看到物体的各个侧面。这就要求图形的处理软件能够
实现旋转、平移、缩放等几何变换。
我们知道,点是构成一个几何形体的最基本的元素。
一幅二维图形可以看成是一个点集。那么,我们就可以把
对图形的几何变换归结对点的变换。
3
2.2.1 图形变换方法
一、点的向量表示
在二维空间中点的表示方法,我们通常是用它的坐标来
表示,写作P(x,y)。为了以后变换的方便,我们可以把
它写作矩阵的形式,即用一行两列的矩阵 x y 或一个两
x
行一列的矩阵 表示。在三维空间里则用 x y z
y
表示空间一点。那么,对于一个二维空间的图形或三维空间
的立体,可以用一个点的集合(简称点集)来表示,每个点
对应一个行向量,则点集为n×2或m×3阶的矩阵:
x1
x
2
xn
y1
y2
y n n 2
或
x1
x
2
xm
y1
y2
ym
z1
z2
zm m
3
4
例如:已知三角形ABC顶点的坐标分别为A(x1,
y1),B(x2,y2),C(x3,y3)则三角形ABC可以
记作矩阵:
x1
x2
x3
y1
y2
y 3
然后把它以数组的形式存贮在计算机内。
5
二、齐次坐标
齐次坐标是将一个n维空间的点用n十1维,即附加一个
坐标来表示。如二维点[x y]的齐次坐标通常用三维坐标
[Hx Hy H]表示,三维点[x y z]的齐次坐标通常用四
维坐标[Hx Hy Hz H]表示,……。
在齐次坐标系中,最后一维坐标H称为比例因子。由
于比例因子H的取值是任意的,所以任一点可用许多组齐
次坐标表示,如二维点[3 2]可表示为[3 2 1]、[6 4
2]、[9 6 3]等。另外,可用H=0的向量表示无穷远的点。
例如用[1 0 0 0]、[0 1 0 0]、[0 0 1 0]分别表
示x,y,z轴上的无穷远点。
对齐次坐标进行坐标变换称为齐次变换,
相应的变换矩阵称为齐次变换矩阵
6
反过来,还可以通过矩阵变换将无穷远点变换为与之
对应的有限远点。当H=1时,则称为规范齐次坐标。从
齐次坐标返回到n维空间去时,只需将坐标中每个分量除
以H就可以了。以后介绍的变换矩阵实际上都是奇次坐标
变换。
用齐次坐标方式进行变换运算不但可以产生正常坐标
变换的同样效果,而且可以简化正常坐标变换过程。在
图形变换中引入齐次坐标表示,还能使各种基本变换,
如旋转、平移和比例交换等具有统一的变换矩阵格式,
并且可以将它们结合在一起进行组合变换,同时也便于
计算。
7
三、变换矩阵
由于图形可以用点集表示,因此要对图形进行变换,
只要变换点就可以了。
对点的变换可以通过相应的矩阵运算来实现,即:
矩阵运算
新点(集)
旧点(集)×变换矩阵
若将二维空间的点由某个位置P(x ,y)变换到一个新的
位置P*(x*,y*),变换的原理是把齐次坐标点(x,y,1)
通过变换矩阵变换成新的齐次坐标点(x*,y*,1)。即:
x
y
1 x
*
y
*
1
8
T为基本变换矩阵:
*
*
*
+ P (x ,y )
+ P ( x, y)
a
c
b
d
从变换功能上可把T分为四个子矩阵,其中
对图形进行比例、旋转、对称、错切等变换;
[ l m ] 对图形进行平移变换;
[ p q ]T 对图形进行投影变换,不做投影变换时取p = 0,
q = 0;
[ s ] 对图形进行全比例变换。通常取s=1。
9
三维图形的变换矩阵是二维图形变换矩阵的
简单扩展,在三维空间中,用四维齐次坐标表示
三维点,即[x y z 1]。三维变换矩阵则采用
4×4阶矩阵表示,即:
a
d
h
l
b
c
e
f
i
j
m
n
p
q
r
s
10
a
d
h
l
齐次变换矩阵:
a
d
h
b
e
i
缩放
旋转
错切
c
f
j
l
m
平移
n
b
c
e
f
i
j
m
n
p
q
r
s
s
整体缩放
p
q
r
透视变换
11
2.2.2 二维图形的几何变换
一、基本几何变换
1、平移变换
2、比例变换
3、旋转变换
4、对称变换
5、错切变换
二、组合变换
12
一、基本几何变换
1、平移变换
平移变换是将图形在坐标平面内移动,只改变图形
的位置,不改变图形的大小和形状。平移变换如图所示:
y
C
A
m
B
C
A
B
O
l
x
图中l、m分别为x、y方向的平移量。从图中可以得出变
换前后点的坐标值应满足以下关系:
x x l
y y m
13
将它写成矩阵的形式为:
1 0 0
x y 1 0 1 0
l m 1
那么
1
0
l
0
1
m
= x l
y m 1
=
x
*
y
*
1
0
0
1
即为所求平移变换矩阵。
14
例1:已知三角形顶点坐标为A(0,0),B(20,0),C(0,
20),平移参数分别为l=20,m=10;试对此三角形
进行平移变换。
解:因为平移变换矩阵为
所以变换后点的坐标为
15
2、比例变换
比例变换指将原有图形在x、y两个方向上进行放大
或缩小的变换,通过它可以改变图形的大小和方向。
将平面上一点P(x,y)在x、y两个方向上分别进
行放大a倍和d倍的比例变换后得到新点P*(x*,y*),
P和P*的关系为:
x ax
y dy
写成矩阵的形式为
x
y
a
1 0
0
0
d
0
0
0
1
=
a x
dy
1
=
x
*
y
*
1
16
其中,T=
a
0
0
0
d
0
0
0
1
称为比例变换矩阵,a、d分别
为沿 x、y方向上的比例因子,且a、d>0。a、d的取值
不同,变换效果也不同,如下所述:
(1)如果a =d = 1,变换为恒等变换,即变换后点的
坐标不变。
(2)如果a = d≠1,变换为等比例变换。其中,如果a
= d > 1,变换为等比例放大;如果a = d < 1,变换则
为等比例缩小。如图(a)、(b)所示。
(3)如果a ≠ d,变换后的图形会产生畸变。如图(c)
所示。
17
C*
y
y
A*
A
B*
A
o
A*
B
x
(a)a = d > 1
A*
B
C*
C
o
C*
y
C
B*
C
B*
A
x
(b)a = d < 1
B
o
x
(c)a d
18
例2:a=2,d=1时,假设变换前A(1,1),B(2,1),
C(1,2),那么,变换后为A*(2,1),
B*(4,1),C*(2,2),△ABC与△A*B*C*不相似。
19
3、旋转变换
旋转变换一般指图形绕坐标原点旋转一个角度 ,
规定为:绕原点逆时针方向旋转为正,顺时针方向为负。
经过旋转变化后不改变图形自身的大小、形状等,只改变
图形的方向。连续的旋转变换相当于将其旋转角度叠加之
后的旋转变换。
将平面上一点P(x,y)绕坐标原点逆时针旋转
变换后得到新点P1(x1,y1),P和P1的关系为:
角,
20
4、对称变换
对称变换又称为反射变换或镜像变换。
(1)关于坐标原点的对称变换
将平面上一点P(x,y)进行关于原点的对称变换后
得到新点P*(x*,y*),P和P*的关系如图(a)应为:
x*=-x,y*=-y,写成矩阵形式为:
x
y
1
1 0
0
0
1
0
0
0
1
= x
y
1
x
=
*
y
y
其中:
1
0
0
0
1 0
0 1
*
1
C
0
为关于
原点的对称变换矩阵。
A
B*
A*
C*
o
B
x
22
(2)关于x轴的对称变换
将平面上一点P(x,y)进行关于x轴的对称变换
后得到新点P*(x*,y*),P和P*的关系如图(b)应
为:x*=x,y*=-y,写成矩阵形式为:
1 0 0
x y 1 0 1 0
0 0 1
其中:
1
0
0
= x
0
1 0
0 1
y 1
=
x
*
y
*
1
y
0
为关于
x轴的对称变换矩阵。
C
A
o
A
B
*
B*
x
C*
23
(3)关于y轴的对称变换
将平面上一点P(x,y)进行关于y轴的对称变换后
得到新点P*(x*,y*),P和P*的关系如图(c)应为:
x*=-x,y*=y,写成矩阵形式为:
x
其中:
1 0
y 1 0 1
0 0
0
0 =
1
1
0
0
0
0
1
0
1
0
x
y 1 =
x
*
y
*
1
y
为变换矩阵。
B*
C*
C
A*
A
o
B
x
24
(4)关于y=x的对称变换
将平面上一点P(x,y)进行关于直线y=x的对称变换
后得到新点P*(x*,y*),P和P*的关系如图(d)应为:
x*= y,y*= x,写成矩阵形式为:
x
其中:
0 1 0
y 1 1 0 0
0 0 1
0
1
0
1
0
0
= y
0
0
1
x 1
=
x
*
y
*
1
y
B
为变换矩阵。
A
C
o
x
A*
B*
C*
25
(5)关于y=-x的对称变换
将平面上一点P(x,y)进行关于直线y= - x的对称变
换后得到新点P*(x*,y*),P和P*的关系如图(e)应为:
x*=-y,y*=-x,写成矩阵形式为:
x
其中:
y
0
1 1
0
1
0
1
0
0
0
1
0
0
1
0
0
=
y
x
1
0
0为变换矩阵。
1
=
x
*
*
y
1
y
C
A
B*
A*
o
B
x
C*
26
5、错切变换
错切变换是使图形沿错切方向的坐标发生变化,而另
一方向的坐标值不变,从而达到使原图形发生特定变化的
目的。错切变换分沿x轴和沿y轴错切两种形式。
(1) 沿x轴方向的错切
将平面上一点P(x,y)进行沿x轴方向的错切变换后
得到新点P*(x*,y*),变换过程如图(a)所示,从图中
可以看出,沿x轴方向错切变化后,y坐标不变,x将产生一
个增量△x = cy,而且c当取正值时,沿x轴的正方向进行
错切,反之c取负值。P和P*的关系为:x*=x+cy,y*=y。
写成矩阵形式为:
27
1 0 0
x y 1 c 1 0 = x cy y 1 = x * y * 1
0 0 1
1
c
0
其中:
0
0
1
0
1
0
为变换矩阵。
y
y
cy
D
C
D*
C*
D*
B*
C (C*)
A (A* )
•
B(B*)
x
(a)沿x轴方向的错切
A (A* )
D
bx
B
(b)沿y轴方向的错切
x
28
(2)沿y轴方向的错切
将平面上一点P(x,y)进行沿y轴方向的错切变换后
得到新点P*(x*, y*),变换过程如图(b)所示,从图
中可以看出,沿y轴方向错切变化后,x坐标不变,y将产
生一个增量△y = bx,而且当b取正值时,沿y轴的正方向
进行错切,反之b取负值。P和P*的关系为:x*=x,
y*=bx+y。写成矩阵形式为:
x
1 b 0
y 1 0 1 0
0 0 1
其中:
1
0
0
= x
b
1
0
0
0
1
bx y 1
=
x
*
y* 1
为变换矩阵。
29
二、组合变换
在图形的几何变换中,图形的实际变换往往不是单独
采用前述的各种基本变换就可以完成,通常需要将各种基
本变换组合使用,以完成最终的图形变换。这种由多种基
本变换组合而成的变换称为组合变换,相应的变换矩阵叫
做组合变换矩阵。
假设已知点P依次经过T1、T2和T3三个几何变换,得
到的结果为:
P* = ((PT1)T2)T3
运用矩阵乘法的结合律,上式可化为:
由于矩阵不存在交换律,因此矩
P* = P(T1阵相乘的顺序是不能随意互换的。
T2T3)
于是得到组合变换的变换矩阵为:
T = T1T2T3
30
组合变换顺序对图形的影响
复杂变换是通过基本变换的组合而成的,由于矩阵的
乘法不适用于交换律,即:
[A][B] ≠[B][A]
因此,组合的顺序一般是不能颠倒的,顺序不同,则
变换的结果亦不同,如图所示。
31
实例: 绕任意点的旋转变换
平面图形绕任意点P(xp,yp)逆时针旋转 角,需
要通过如下几个步骤来实现:
(1)将旋转中心平移到坐标原点,变换矩阵为
1
1 0
x
p
0
1
yp
0
0
1
(2)将图形绕坐标原点逆时针旋转 角,变换矩阵为
cos
2 sin
0
sin
cos
0
0
0
1
32
(3)将旋转中心平移回到原来位置,变换矩阵为
1
3 0
x
p
0
1
yp
0
0
1
(4)最后得出绕任意点P的旋转矩阵为
1
1 2 3 0
x p
即
0
1
yp
0
0
1
cos
sin
0
cos
sin
x (1 cos ) y sin
p
p
1
0
1
cos
0
x p y p
0
当xp = 0,yp = 0
时,即为对原点的
sin
旋转变换矩阵。
cos
sin
0
0
1
0
0
1
0
0
x p sin y (
1
p 1 cos ) 33
例3:将下图所示图形绕自身对称轴上的一点P(15,12)
逆时针旋转90度,放大2倍(x、y方向的放大倍
数相同)
1、试写出各变换的变换矩阵;
2、求出复合变换矩阵;
3、求出各点变换后的坐标;
Y
A(15,20)
B(10,15)
E(20,15)
P(15,12)
C(10,5)
D(20,5)
X
34
解: (1)、各变换矩阵为:
• 先将P点平移至原点的矩阵 :
1
T1
0
x 0
1
y0
• 绕原点逆时针旋转
cos
T 2 sin
0
0 1
0
0
1 15
0
90
0
1
12
0
0
1
:
sin
cos
0
0
0 0
0 1
1 0
1
0
0
0
0
1
35
• 沿x、y轴放大2倍
2
T3 0
0
0
2
0
0
0
1
• 平移回原位置:
1
T4 0
x 0
0
1
y0
0 1
0 0
1 15
0
1
12
0
0
1
36
(2)、组合变换矩阵:
1
T T1 T 2 T 3 T 4
0
15
0
1
12
0 0
0 1
1 0
1
0
0
0 2
0 0
1 0
0 1
0 0
1 15
0
2
0
0
1
12
0 0
0 2
1 39
2
0
18
0
0
1
(3)、变换后的坐标为:
x A
x
B
x C
xD
x
E
y A
y B
y C
y D
y E
1 x A
1
x
B
1 x C
1 x D
1 x E
yA
yB
yC
yD
yE
1 15
1
10
1 10
1 20
1 20
20
15
5
5
15
1
1 0
1 2
1 39
1
2
0
18
1
0
9
0 29
1 29
9
12
2
2
22
22
1
1
1
1
1
37
作业:
1、将下图所示图形绕自身中心点P(20,20)先缩小
1/2(x、y方向的缩小倍数相同)再顺时针旋转270度,
(1)试写出各变换的变换矩阵;
(2)求出组合变换矩阵;
(3)求出各点变换后的坐标。
A (10,20)
B (30,20)
P (20,20)
38
2、如图所示平行四边形ABCD,已知图上一点G(10,
6),该平行四边形先绕G点逆时针转90度,最后
沿Y方向正向移动3个单位距离。
(1)试写出各变换的变换矩阵;
(2)求出组合变换矩阵;
(3)求出A、B、C、D各点变换后的坐标。
y
D (5,10)
C(15,10)
G (10,6)
B(16,3)
A(5,3)
x
Í ¼4 -1
39
1、解: (1)、各变换矩阵为:
①、先将P点平移至原点的矩阵 :
1
T1
0
x 0
0
1
y0
0 1
0
0
1 20
、沿x、y轴缩小1/2倍:
T3
1
2
0
0
0
1
20
0
1
2
0
0
0
1
0
0
1
③、绕原点顺时针旋转 270 0
cos
T 2 sin
0
sin
cos
0
0 0
0 1
1 0
1
0
0
0
0
1
40
④、平移回原位置:
1
T4 0
x 0
0 1
0 0
1 20
0
1
y0
0
0
1
0
1
20
(2)、复合变换矩阵:
1
T T1T 2T3T 4
0
20
0
1
20
1
0 2
0 0
1 0
0
1
2
0
0
0
0 1
1 0
1
0
0
0 1
0 0
1 20
0
1
20
0
0
1
0
2
1
30
1
2
0
10
0
0
1
(3)、变换后的坐标为:
x'A
x'
B
x 'C
x 'D
x'
E
x ' F
y 'A
y 'B
y 'C
y 'D
y 'E
y 'F
1 x A
1
x
B
1 x C
1 x D
1 x E
1 x F
yA
yB
yC
yD
yE
yF
1 15
1
25
1 30
1 25
1 15
1 10
28 . 66
28 . 66
20
11 . 34
11 . 34
20
1
1 0
1 1
1 2
30
1
1
1
2
0
10
15 . 67
0
15 . 67
20
0
24 . 33
1
24 . 33
20
17 . 5
22 . 5
25
22 . 5
17 . 5
15
1
1
1
1
1
1 41
2、解:(1)
1)先将G点平移到坐标原点,变换矩阵为
T
1
1
0
10
0
1
6
0
0
1
2)绕原点顺时针旋转90度的变换距阵为
T
2
cos
sin
0
sin
cos
0
0 0
0 1
1 0
1
0
0
0
0
1
3)沿Y正向平移3个单位的变换矩阵为
T
3
1
0
0
0
1
3
0
0
1
42
4)将G点移回原处的变换矩阵为
T
4
1
0
10
0
1
6
0
0
1
(2)组合变换矩阵为
T T 1T
(3)
5
16
15
5
3
3
10
10
2
T T
3
1
5
1
16
T
15
1
1
5
4
0
1
16
3
3
10
10
0
0
1
1
0
1
1
0
1
1
1
16
1
1
0
1
13
0
13
0
6
1
6
4
15
14
A(13,4) B(13,15) C(6,14) D(6,4)
4
1
1
1
1
43