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