1、掌握二维、三维图形变换的基本原理;
2、掌握二维、三维图形复合变换方法;
3、掌握视窗变换与裁剪方法和算法;
4、了解隐藏线与隐藏面的处理方法。
1、二维图形几何变换
2、三维图形几何变换
3、视窗变换与裁剪方法和算法
4、隐藏线与隐藏面的处理方法本章内容
《机械 CAD/CAM》课程教案教学目的第三章第三章计算机辅助图形处理计算机辅助图形处理几何变换
{一般情况下,图形是一个点集。故点的几何变换是图形变换的基础。变换的实质是改变各点的坐标值。
{两种变换模式(本质相同) ——
坐标变换模式——图形不动,坐标系改变图形变换模式——坐标系不动,图形改变(★)
点 P的矩阵(向量)表示法行表示法:
列表示法:
( )yxP =
=
y
x
P
齐次坐标表示法
{用n+1 维向量表示n 维向量。即用 (x y
k)表示二维平面点 (x y),用 (x y z k)
表示三维空间点 (x y z)。
{非齐次坐标表示的(普通的或物理的)
坐标是唯一的,相对应的齐次坐标则不唯一,是一对多的关系。例如 (x
1
y
1
k
1
),(x
2
y
2
k
2
),…,(x
m
y
m
k
m
)等等均可表示同一个点 (x y)。
标准化齐次坐标表示法
{一般将( x
1
y
1
k
1
),( x
2
y
2
k
2
)、…、
(x
m
y
m
k
m
)等等化为( x y 1 ),称为
( x y )的标准化齐次坐标表示法。
齐次坐标表示的优点
1,可以表示无穷远点——( x y )不能,
而 ( x y 0 )则代表了二维平面上无穷远的点(透视投影变换时意义清晰)。
2,有利于几何变换,可以产生平移、透视等变换(非齐次坐标表示时无法产生)。
二维图形的几何变换
{变换矩阵(齐次坐标表示时)
=
shg
fdc
eba
T
D2
几何变换的矩阵运算
( 1)列表示法
( 2)行表示法(★)
=
11
2
*
*
y
x
Ty
x
D
( ) ( )
D
Tyxyx
2
**
11 =
1.工程图形的齐次坐标矩阵表示齐次坐标,将一个 n维向量用n+1 维向量表示。
例:平面三角形A齐次坐标矩阵表示
12
3
o
x
y
A
=
1
1
1
33
22
11
yx
yx
yx
A
3.1 二维图形的几何变换若图形A经过某种变换后得到图形B,则有:
B=A·T
T称为变换矩阵,二维:T 为3x3矩阵,三维:T 为4x4矩阵。
( 1)比例变换变换矩阵为:
=
100
00
00
d
a
T
[][] [ ]1
100
00
00
11'' dyaxd
a
yxyx =
=
坐标点 (x,y,1)变换运算:
若 a=d=1,为恒等变换,变换后的图形不变;
若 a=d≠ 1,>1时为等比例放大,<1时为等比例缩小;
若 a≠ d,图形在 x,y两个坐标方向以不同的比例变换。
2.二维图形的基本几何变换
( 2)对称变换
[][] [ ]1
100
0c
0b
11'' dybxcyaxd
a
yxyx ++=
=
根据a b c d 不同的取值情况,可以获得不同的对称变换。
Y
X
B'
C'
A'
C
A
B
O
①y轴对称变换
=
100
010
001
T
[][] [ ]1
100
010
001
11'' yxyxyx?=
=
②x轴对称
=
100
010
001
T
A
A'
B'
B
O
X
C'
C
Y
[][] [ ]1
100
010
001
11'' yxyxyx?=
=
③对原点对称
=
100
010
001
T
A
B
O
X
C
A'
B'
C'
[][] [ ]1
100
010
001
11'' yxyxyx=
=
④45°线对称
=
100
001
010
T
A
B
O
X
C
B'
A'
C'
[][] []1
100
001
010
11'' xyyxyx =
=
⑤-45°线对称
=
100
001
010
T
[][] [ ]1
100
001-
01-0
11'' xyyxyx=
=
( 3)旋转变换绕坐标原点旋转,逆时针为正,顺时针为负
θ
Y
(x,y)
(x',y')
X
=
100
0cossin
0sincos
θθ
θθ
T
[][]
1cossinsincos
100
0cossin-
0sincos
11''
θθθθ
θθ
θθ
yxyx
yxyx
+?=
=
( 4)错切变换
=
100
01
01
c
b
T
[][] [ ]1
100
01
01
11'' ybxcyxc
b
yxyx ++=
=
其中:c为x方向错切系数,b为y方向错切系数。
①当b=0,x ’=x+cy,y’=y。y坐标不变,c>0沿+x方向错切;
c<0沿-x方向错切。
②当c=0,x ’=x,y’=bx+y。x坐标不变,b>0沿+y方向错切;
b<0沿-y方向错切。
( 5)平移变换
=
1
010
001
ml
T
[][] [ ]1
1ml
010
001
11'' mylxyxyx ++=
=
其中:l为 x方向平移量,m 为 y方向平移量。
O
Y
X
m
二维图形基本变换矩阵讨论,
=
dc
ba
T1
实现图形的比例、对称、错切、旋转等基本几何变换;
[ ]mlT =2
实现图形平移变换;
=
q
p
T 3
实现图形透视变换,一般二维变换中 p = q = 0;
[ ]sT =4
实现图形全比例变换,s>1等比例缩小; 0<s<1等比例放大。
=
sml
qdc
pba
T
3.复合变换 由多种基本变换的组合而实现的变换 。
复合变换矩阵,等于各基本变换矩阵的有序乘积。
例:三角形abc 绕任意点 A旋转α角,步骤:
旋转中心平移到坐标原点 T
平;
绕原点旋转 T
转;
旋转中心平移到原来位置 T
—平

复合变换矩阵 T为,
坐标点变换:
[X′ Y′ 1]=[X Y 1]T
+?+?
=
1)cos1(sinsin)cos1(
0cossin
0sincos
αααα
αα
αα
yxyx
++=

++=

AAA
AAA
cossincossin
sincossincos
yyxYXY
xyxYXX
αααα
αααα
坐标点变换:
[X′ Y′ 1]=[X Y 1]T
绕任意点A 旋转α角的点坐标计算
#include <stdio.h>
#include <math.h>
#include <graphics.h>
#define PI 3.1415926
main()
{
float degree=90,x[3]={40,90,40},y[3]={40,40,60};
float x1[3],y1[3];
int i,m,n,xa=20,ya=30;
m=DETECT;
initgraph(&m,&n,"c:\\");
degree=degree*PI/180;
for(i=0;i<3;i++)
{
x1[i]=x[i]*cos(degree)-y[i]*sin(degree)-xa*cos(degree)+ya*sin(degree)+xa;
y1[i]=x[i]*sin(degree)+y[i]*cos(degree)-xa*sin(degree)-ya*cos(degree)+ya;
}
line(x1[0],y1[0],x1[1],y1[1]);
line(x1[0],y1[0],x1[2],y1[2]);
line(x1[1],y1[1],x1[2],y1[2]);
closegraph();
}
三角形绕任意点 A旋转 C语言程序:
已知条件
A点坐标(20,30) 旋转角α=90度三角形(40,40)(90,40)(40,60)
void far initgraph ( int far *graphdriver,
int far *graphmode,
char far *pathtodriver)
3.复合变换 由多种基本变换的组合而实现的变换 。
复合变换矩阵,等于各基本变换矩阵的有序乘积 。
坐标点变换,
[X′ Y′ 1]=[X Y 1]T

=
1)1()1(
00
00
AA dyax
d
a
绕任意点A的比例变换
100
00
00
d
a
1
010
001
AA yx
3.复合变换 由多种基本变换的组合而实现的变换 。
复合变换矩阵,等于各基本变换矩阵的有序乘积。
对任意直线作对称
3.复合变换 由多种基本变换的组合而实现的变换 。
复合变换矩阵,等于各基本变换矩阵的有序乘积。
对任意直线作对称
=
1/0
010
001
T1
BC
3.复合变换 由多种基本变换的组合而实现的变换 。
复合变换矩阵,等于各基本变换矩阵的有序乘积。
对任意直线作对称
=
100
0cossin
0sincos
T2 αα
αα
|/|arctan BA=α
3.复合变换 由多种基本变换的组合而实现的变换 。
复合变换矩阵,等于各基本变换矩阵的有序乘积。
对任意直线作对称
=
100
010
001
T3
3.复合变换 由多种基本变换的组合而实现的变换 。
复合变换矩阵,等于各基本变换矩阵的有序乘积。
对任意直线作对称
=
100
0cossin
0sincos
T4 αα
αα
|/|arctan BA=α
3.复合变换 由多种基本变换的组合而实现的变换 。
复合变换矩阵,等于各基本变换矩阵的有序乘积。
对任意直线作对称
=
1/0
010
001
T5
BC
=
=
1/0
010
001
100
02cos2sin
02sin2cos
1/0
010
001
TTTTTT 5*4*3*2*1
BCBC
αα
αα
3.复合变换 由多种基本变换的组合而实现的变换 。
复合变换矩阵,等于各基本变换矩阵的有序乘积。
对任意直线作对称三维图形变换矩阵T:4×4矩阵左上角子矩阵,图形的比例、对称、
错切和旋转变换;
左下角子矩阵,平移变换;
右上角子矩阵,透视变换;
右下角子矩阵,比例变换。
=
snml
rjih
qfed
pcba
T
3.2 三维图形的几何变换
1、平移变换
=
1nm
0100
0010
0001
l
T
变换矩阵为:
l,m,n,为 x,y,z三个坐标方向的平移量。
[][ ][ ]111''' nzmylxTzyxzyx +++=?=
2、比例变换变换矩阵为:
=
1000
0j00
00e0
000a
T
[ ] [ ] [ ]111''' jzeyaxTzyxzyx =?=
其中,a,e,j分别为 x,y,z方向的比例因子。
全比例变换
=
s
T
000
0100
0010
0001
s>1等比例缩小;0<s<1等比例放大。
错切变换(斜轴测图的基础)
{ 空间立体的某个表面沿着指定的坐标轴进行移动,产生错切
(剪切)变形。
=
1000
01
01
01
hg
fd
cb
T
3、错切变换变换矩阵为:
=
1000
01ih
0f1d
0cb1
T
[][] [ ]1
1000
01
01
0cb1
11''' zfycxizybxhzdyx
ih
fd
zyxzyx ++++++=
=
d,h:沿 x方向的错切系数;
b,i:沿 y方向的错切系数;
c,f:沿 z方向的错切系数。
沿三个坐标轴共6 个基本错切变换
① 沿 x轴:
1)沿x含 y:
=
1000
0100
001
0001
)(
d
T
yx
[][] [ ]1
1000
0100
001
0c01
11''' zydyx
d
zyxzyx +=
=
沿 x含 y的错切变换
x
y
z
沿 x含 z的错切变换
2)沿x含 z
=
1000
010
0010
0001
)(
h
T
zx
[][] [ ]1
1000
010
0010
0c01
11''' zydzx
h
zyxzyx +=
=
沿 x含 z的错切变换
y
x
z
错切变换
② 沿 y含 x、沿y 含 z(略)
③ 沿 z含 x、沿z 含 y (略)
4、旋转变换
( 1)绕 x轴旋转 a角的变换矩阵:(平行于yoz 平面)
=
1000
0cossin0
0sincos0
0001
αα
αα
x
T
( 2)绕 y轴旋转 a角的变换矩阵:(平行于xoz 平面)
=
1000
0cos0sin
0010
0sin0cos
αα
αα
y
T
( 3)绕 z轴旋转 a角的变换矩阵:(平行于xoy平面)
=
1000
0100
00cossin
00sincos
αα
αα
z
T
相对于 xoy平面,yoz平面和 xoz平面三个坐标平面的对称变换矩阵分别为:
=
1000
01-00
0010
0001
xoy
T
=
1000
0100
0010
0001-
yoz
T
=
1000
0100
001-0
0001
xoz
T
5、对称变换复合变换(与二维变换类似)
例:物体绕任意轴旋转 α 角,旋转轴过点p( x,y,
z),该轴的方向余弦为n
1、
n
2、
n
3

1,平移使旋转轴过原点(T
1

2,绕 z轴旋转 -θ
2
( T
2

3,绕 y轴旋转 -θ
1
( T
3

4,绕 z轴旋转 α ( T
4

5,绕 y轴旋转 θ
1
( T
5
=T
3
-1

6,绕 z轴旋转 θ
2
( T
6
=T
2
-1

7,反向平移回原位(T
7
=T
1
-1

则变换矩阵为,T= T
1
T
2
T
3
T
4
T
5
T
6
T
7
1
2
1
2
n
n
tg

3
1
1
cos n

主视图俯视图
左视图
3.3 三维图形的投影变换和透视变换投影变换
{ 投影变换——把物体的三维表示形式转换为二维表示形式,从而把三维空间物体转换成二维平面上的图形。
z 尽管可以用矩阵形式处理三维图形,但三维物体落实到纸面上或屏幕上时均为平面图形,故必然要用到各种投影
{ 平面几何投影——投影面为平面,投影线为直线投影变换的分类
1,平行投影——投影线相互平行,即投影中心在无穷远处。
2,透视投影——投影线相交于投影中心。
平行投影平行投影正投影 ——投影线⊥投影面斜投影 ——投影线不与投影面垂直正三面投影 正轴测投影 斜轴测投影投影图的用处
1,正三面投影——显示零件或成套设备的结构细节,用于加工或装配(由于信息不完全,对工程三视图的理解要经过专门的教育和训练)
2,轴测投影——得到物体投影图的立体效果
3,透视投影——应用于要求较好实感效果的场合,如仿真、机械实体造型、
建筑物模型等。
正三面投影
{ 三个投影面 ——
1,V面 ——xoz平面
( y=0),正面
2,W面 ——yoz平面
( x=0)、侧面
3,H面 ——xoy平面
( z=0)、水平面主视图俯视图
左视图
正三面投影
3.3 三维图形的投影变换和透视变换投影变换(三视图)
主视图:变换矩阵中坐标y=0,其它坐标不变:
=
1000
0100
0000
0001
V
T
俯视图 令z=0,绕x顺时针旋转90°,再在负z方向平移,其变换矩阵为:
=
100
0100
0010
0001
1000
0
2
-cos
2
sin-0
0
2
-sin
2
-cos0
0001
1000
0000
0010
0001
n
T
H
ππ
ππ
左视图,令x=0,绕z轴逆时针转90°,再沿负x方向平移,变换矩阵为:
=
100
0100
0010
0001
1000
0100
00
2
cos
2
sin-
00
2
sin
2
cos
1000
0100
0010
0000
l
T
W
ππ
ππ
透视投影及透视变换
{ 空间一点的透视投影是过该点的投影线(空间该点与投影中心的连线)与投影面的交点。
{ 视点和物体应分别位于投影面的两侧。例如,使物体处于y<0 的半空间,通过y 向平移实现。
{ 空间点与其透视投影之间的数学关系,即为透视变换。
{ 人的视觉和摄象机都基于透视原理。
透视投影变换
(平行透视——画面与V 面平行)
视点 S:
观察点的位置,
即投影中心画面:
即投影面点 P的透视:
PS与画面的交点P ′
透视投影透视投影:从一个视点透过一个平面观察物体视线与平面相截交得到的图形就是透视图。
灭点灭点:不平行与投影面的平行线,其无穷远点的透视投影汇聚为一点主灭点主灭点:若一组平行线与某坐标轴平行,则其灭点称为主灭点。
透视投影透视投影一点透视投影二点透视投影三点透视投影只有一个主灭点画面平行于投影对象的一个坐标平面,故又称平行透视。
有两个主灭点画面平行于投影对象的一根坐标轴,而与两个坐标平面成一定的角度(一般为 20°-
30°),故又称成像透视。
有三个主灭点画面与投影对象的三根坐标轴均不平行,
故又称斜透视。
一点透视投影
(平行透视——画面与V 面平行)
x
二点透视投影(成角透视 ——画面平行且仅与 z轴平行)
x
z
y
三点透视投影(斜透视 ——画面与三根坐标轴均不平行)
a)一点透视 b)二点透视 c)三点透视透视变换:
是通过视点将三维物体投影到投影面的变换。
一点透视投影
d
d
E
V
x
z
y
P(x,y,z)
P2
P1
P0
P'(x',0,z')
P1'
P2'
O
透视投影
{ 点 P’(x’,0,z’)为 P(x,y,z)的透视投影,由
qy
z
z
qy
x
x
d
q
d
y
yd
d
yd
d
OPEO
EO
PP
OP
x
x
PEPEOP
+
=
+
=?=
=
=
+
=
+
==
ΔΔ
1
',
1
'
1
1
1
||
''
:

001
1
10
'
1
同理,则令得透视变换
{ 实际上,x’,z’的关系式在任何平行于V面的平面上均成立,即 y’为自由变量(只透视变换而不向 V面投影),则可得
qy
y
y
+
=
1
'
透视变换
)1
111
(
)1(
1000
100
000
001
)()(
+++++++++
=
+++=
=
′′′
rzqypx
z
rzqypx
y
rzqypx
x
rzqypxzyx
r
q
p
zyxzyx
规格化窗口和视图用户域和窗口
{ 用户域(WD ) ——
z 定义草图的整个自然空间
z WD是一个实数域,理论上说是连续无限的
{ 窗口( W) ——
z 用户指定的任一区域
z W≤ WD,小于 WD的 W叫做 WD的子域。
z W通常是矩形域(某些情况下,也可以定义圆形或多边形的窗口)
z W可以嵌套
3.4 窗视变换与裁剪屏幕域和视图区
{ 屏幕域( DC) ——
z 设备(显示器)输出图形的最大区域
z 有限的整数域( 1280× 1024,
1024× 768等)
屏幕域和视图区
?视图区( V) ——
z≤ DC的任一矩形(圆形/ 多边形)区域
z由用户在DC 中用设备坐标来定义
z用户选择的W 域内的图形要在 V中显示,并须转换成设备坐标
z一个DC 可以分成多个V (菜单区、提示区、命令区、图形显示区等)
窗口—视区变换
1)窗口 矩形观察框,用以显示感兴趣的图形内容。
窗口一般用矩形对角坐标表示。涉及图形剪裁技术。
窗口也可定义为圆形、多边形等异型窗口。
窗口可以嵌套。
Y
X
窗口
2)视区 在图形设备上定义的矩形区域。
视区同样用矩形对角坐标表示。
视区应小于等于屏幕区域,
可在同一屏幕上定义多个视区。
3)窗口与视区的变换若将窗口内容在相应视区上显示,必须进行坐标变换。其变换归结为坐标点的变换。
窗口与视区的变换
=
=
wlwr
wlw
slsr
sls
wlwr
wlw
slsr
sls
YY
YY
YY
YY
XX
XX
XX
XX
窗口与视区坐标点的变换:
+?
=
+?
=
slwlw
wlwr
slsr
s
slwlw
wlwr
slsr
s
)(
)(
YYY
YY
YY
Y
XXX
XX
XX
X
窗口区和视图区的坐标变换
{ 变换公式——
z 用户坐标系下的点( x
w
,y
w
)对应屏幕视图区的点(x
v
,y
v
),则
+
+
=
dcy
bax
y
x
w
w
s
s
窗口区和视图区的坐标变换
z 其中 (R-Right,L-Left)
)/()(
)/()(
)/()(
)/()(
WLWRVLVRWLVL
WLWRVLVR
WLWRVLVRWLVL
WLWRVLVR
YYYYYYd
YYTYc
XXXXXXb
XXXXa
=
=
=
=
窗口区和视图区的坐标变换
z 若a ≠c ( x
s
和 y
s
方向变化不同),
则产生畸变
z 若a=c=1,b=d=0,则在 S中产生与W
中相同的图形
z 应用窗口技术的最大优点是能方便地显示用户感兴趣的图形(整体图和局部图)
窗口与视区坐标点的变换:
可见:
①若视区大小不变,窗口缩小或放大,会使图形放大或缩小。
②若窗口大小不变,视区缩小或放大,则图形会跟随缩小或放大。
③若窗口与视区大小相同时,则图形大小比例不变。
④若视区与窗口纵横比不同时,则图形会产生伸缩变形。
编码法图形裁剪编码规则:上下右左、在为 1不在为 0
点 A—0101 点 B—0000
图形显示过程用户坐标 对窗口区进行裁剪 窗口区到视图区的规格化变换 视图区从规格化坐标到设备坐标的变换 在图形设备(显示器)上输出图形
3.5 隐藏线与隐藏面的处理
3.5 隐藏线与隐藏面的处理基本的测试方法:
求平面的法向矢量和方程;
最小最大测试;
包含性测试;
深度测试;
可见性测试。
3.5 隐藏线与隐藏面的处理
①求平面的法向矢量和方程
0=+++ DCzByAx
3.5 隐藏线与隐藏面的处理
0=+++ DCzByAx
,不可见
,可见
0C
0
cos
<
>
=
C
N
C
λ
①求平面的法向矢量和方程如果需要判断该平面的可见性,可以求出法向矢量与观察方向的夹角。
例如,需要沿 z轴的负向观察物体,则
3.5 隐藏线与隐藏面的处理
①求平面的法向矢量和方程三
3.5 隐藏线与隐藏面的处理
②最小最大测试
——重叠测试、边界盒测试
3.5 隐藏线与隐藏面的处理
③包含性测试
3.5 隐藏线与隐藏面的处理
③包含性测试夹角之和判别法,是将所判点与多边形的所有顶点引一系列射线,然后按顺时针或逆时针方向沿多边形轮廓计算这些射线之间的夹角之和。
如果累计之和为0,则点在多边形的外部,
不可见。
否则如果累积之和为2 π,则点在多边形的内部,可见。
这里两个射线之间的夹角大小用余弦定理求出。