计算机图形学7(中文)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2015-5-24 31
Example(2)
二、求CD
1.编码 A C: (0010) D: (0100) E 2.判断C、D点编码是否全为零( C 即二者是否同在窗口内) J’ F C和D都不在窗口内,继续步骤3 B I’ 3.判断C和D是否在窗口某边界同外侧(显 D 然完全不可见,此时二者编码逻辑乘不等于0) C和D编码逻辑乘等于0,不同在某边界外侧, 不是显然完全不可见,不能抛弃,继续步骤4
2015-5-24
7

两矢量的矢积(叉积)
(Vector Product)
设两矢量a ( a x , a y , a z ),b (bx , by , bz ),则 其矢积(外积)是一个 矢量,用a b表示: ab a b sin a b与a, b都垂直。 a, b, a b按这个顺序构成右手系 。
B C
D’
H
I (a) 裁剪线段的几种典型情况
I (b)
2015-5-24
17
直接裁剪算法
算法流程:
若线段两端点均落在窗口内:
线段显然完全
可见 若线段两端点均落在窗口外: 计算线段与窗口交点(0个或2个),若无交点, 则线段显然完全不可见,否则线段部分可见。 若线段两端点分别落在窗口的内外两侧: 计算线段与窗口边界的交点(1个),确定可 见部分线段;
2015-5-24 6

两矢量的数积(点积)
(Vector Dot Metrix)
设两矢量a ( a x , a y , a z ),b (bx , by , bz ),则 其数积(内积)是一个 数量,用a b表示: a b a b cos a x bx a y by a z bz 其中为两矢量的夹角。
2015-5-24
A E C J’
B
F
I’
D
29
Example(1)
6.判断A、B点编码是否全为零( 即二者是否同在窗口内) A (0000)在窗口内,但B (0100) 不在窗口内,继续步骤3 7.判断A和B是否在窗口某边界同外侧 (即是否显然完全不可见,此时二者编 码逻辑乘不等于0 ) A和B编码逻辑乘等于0,不同在某边 界外侧,不是完全不可见,不能抛 弃,继续步骤4
y
y ymin
x xmin
x xmax
x
12
线段裁剪
F
D
F H
D

E
裁剪窗口
H’ J A J’ G’ G I’
B C
D’
E
H’ J A J’ G’ G I’
B C
D’
H
I (a) 裁剪线段的几种典型情况
I (b)
P1
P( x, y)
(a,b)
2015-5-24
10

通过点P 1 ( x1 , y1 ),P 2 ( x2 , y 2 )的直线方程为: x x1 t ( x2 x1 ) y y1 t ( y2 y1 )
当限制上述表达式满足 :t [0,1]时, 所得表达式即为线段 P 1P 2
二维图形裁剪
预备知识
2015-5-24
2
Hale Waihona Puke Baidu
矢量
定义:
以M1为起点, M2为终点的矢量记为: a M1M 2
则:a (ax , ay , az ) ( x2 x1, y2 y1, z2 z1 )
M 2 ( x2 , y2 , z2 )
M1 ( x1 , y1 , z1 )
2015-5-24 4


矢量的方向余弦:非零矢量的方向角的余弦称为该矢量的方向余弦 M (x , y , z ) 设,,分别表示非零矢量的方 向角,
2 2 2 2
则矢量的方向余弦分别 为:
x2 x1 cos ( x2 x1 ) 2 ( y2 y1 ) 2 ( z 2 z1 ) 2 y2 y1 cos 2 2 2 ( x x ) ( y y ) ( z z ) 2 1 2 1 2 1 z2 z1 cos 2 2 2 ( x x ) ( y y ) ( z z ) 2 1 2 1 2 1
多边形裁剪
Sutherland-Hodgman多边形逐边裁剪算
法 Wiler-Atherton多边形双边裁剪算法
2015-5-24 16
线段裁剪
F
D
F H
D

E
裁剪窗口
H’ J A J’ G’ G I’
B C
D’
E
H’ J A J’ G’ G I’
2015-5-24
M1 ( x1, y1, z1 )
5

两矢量的夹角
设两矢量a与b的方向余弦分别为: l1 , m1 , n1和l2 , m2 , n2, 则a与b的夹角可由下式确定: cos l1l2 m1m2 n1n2
显然,若cos 0则两矢量垂直; 若 cos 1则两矢量平行。
2015-5-24 18
点的裁剪
点(x,y)在窗口内的充分必要条件
xmin x xmax , ymin y ymax
y ymax
(x,y)
y ymin x xmin
2015-5-24
x xmax
19
直线段与窗口边界交点的计算
设线段端点坐标为: P0( x0 , y0 ), P1( x1, y1 )
2015-5-24
x < xmin
23
区域编码
1001 1000 1010
0001
0000
0010
0101 裁剪窗口
0100 0110
2015-5-24
24
端点编码
encode(P,code):端点的编码是其所在的区域编码 线段1:两个端点编码都为(0000) 线段2:左端点(1000), 2 右端点(1010) 5 线段3:左端点(0100) yt 1 右端点(0010) 线段4和线段3一样 3 线段5:左端点(1001) yb 4 右端点(0000) xl 0000) xr 规律: 1)显然完全可见的线段其两端点编码都为( 2)线段两端点编码中相同位同为1,则线段一定在相同边界外 侧,其显然完全不可见。
2015-5-24
A
28
Example(1)
4.求交点 只对编码不全为0端点找替代其的交点 (但不能将窗口内端点(编码为全0)向 外找其替代交点)。 因为A的编码(0010)不全为0,对 其为1的那些边界从左向右(或从右向 左)求交点。交点使其相应位为0。线 段AB与右边界求出交点E,令A=E。 回步骤1。 5.编码 A: (0000) B: (0100)
适于求交难度大的图形
针对参数表示图形
效率提高
y ymin x xmin
x xmax
适用于简单图元,如:直线、多边形、字符
2015-5-24
15
内容
线段裁剪
Cohen-Sutherland线段裁剪算法 Nicholl-Lee-Nicholl线段裁剪算法 中点分割算法 Liang-Barsky裁剪算法
2015-5-24
13


二维裁剪的实质:就是决定图形中哪些点、线 段、文字、以及多边形在窗口之内。 二维裁剪的基本方法: 将图形元素(如线段) 与窗口边界求交点,交点连接起来在窗口内的部 分就是裁剪后的显示图形(即求交).

2015-5-24
裁剪算法的实现
针对点阵图形
算法简单,效率低
y ymax
2015-5-24 3

矢量的模长(Vector Mode)
a M 1M 2 ( x2 x1 ) 2 ( y2 y1 ) 2 ( z2 z1 ) 2

矢量的单位化 矢量的方向角
ax a y az a ( , , ) a a a a
非零矢量与三个坐标轴的夹角称为该矢量的方向角
Cohen—Sutherland线段裁剪算法
编码法:最早的、最流行的裁剪算法,可
推广到三维空间。
原理:利用判别规则(位置编码)确定线段端点 与窗口边框及其延长线的位置关系,从而实现
线段裁剪。
2015-5-24
21
Cohen—Sutherland线段裁剪算法
流程:
线段端点编码; 利用位置编码进行裁剪
t [0,1]
x xmin 交点坐标为: y y xmin x0 ( y y ) 0 1 0 x x 1 0
2015-5-24
xmin x0 t x1 x0 y ymin s y max ymin
20
2015-5-24
A E C J’
B
F
I’
D
30
Example(1)
8.求交点 因为A的编码(0000)全为0,不用求交 点。只需对B (0100)中为1的那些边界 A 从左向右(或从右向左)求交点,交点使 E C 其相应位为0。线段AB与右边界求出交点 F F,令B=F。回步骤1。 J’ B I’ 9.编码 D A: (0000) B: (0000) 10.因为A=B=0000,则直线段完全保留,返回;
• 计算线段与窗口边框及其延长线的交点 • 实现裁剪
2015-5-24
22
编码区域和端点
方法: 扩展窗口的边界把平面划分为9个区域,如下编码各 区域(从左到右)
第1个比特位 上边界外侧,上边界以上 第2个比特位 下边界外侧,下边界下方
y > ymax y < ymin
第3个比特位 右边界外侧, 右边界的右侧 x > xmax 第4个比特位 左边界外侧, 左边界的左侧

2015-5-24 25
Cohen—Sutherland线段裁剪算法
算法:(1)对直线的两个端点编码C1,C2;
(2)若C1=C2=0000,则直线完全保留,返回; (3)否则判断直线与边界有无交点:将C1逻辑乘C2, 即C1^C2,若C1^C20,则说明C1,C2有某相 同位同为“1”,即两端点同在某边界的外侧,此 时 直线与边界无交点,抛弃直线,返回; (4)否则C1^C2=0且C10或C20,此时与边界有交点, 求交.用交点替代端点.GOTO (1).
x x0 t ( x1 x0 ) 则线段方程的参数形式 为: y y0 t ( y1 y0 ) P (t ) t ( P1 P 0) P 0
x xmin 矩形窗口的左边界的参 数方程为: y ymin s( ymax ymin ) s [0,1]
P( x, y)
P2
P1
2015-5-24 11
二维图形裁剪问题描述


目的:按需显示图形
识别出图形落在显示区域(窗口)内/外部分
• •
图元在窗口区域内外的判别 图元与窗口的求交运算
y ymax

裁剪窗口:矩形区域
x xmin , x xmax y ymin , y ymax
2015-5-24
Trivially rejected
Computing the intersections and replacing the respective endpoint
2015-5-24
27
Example(1)
用CS算法裁剪AB和CD
一、求AB
1.编码 E A: (0010) B: (0100) C 2.判断A、B点编码是否全为零( F J’ B 即二者是否同在窗口内) I’ A和B都不在窗口内,继续步骤3 D 3.判断A和B是否在窗口某边界同外侧(显 然完全不可见,即二者编码逻辑乘不等于0) A和B编码逻辑乘等于0,不同在某边界外侧, 不是显然完全不可见,不能抛弃,继续步骤4
2015-5-24
26
Cohen—Sutherland算法流程图
Encoding endpoints: encode(p1,code1);encode(p2,code2)
code1==0000&&code2==0000
y y
trivially accepted
exit exit
N
code1&code2!=0000
2015-5-24
8

i a b ax bx j ay by k az bz
(aybz azby , azbx axbz , axby aybx )
2015-5-24
9
直线的参数方程
通过点P (a, b)的直线方程为: 1 ( x1 , y1 ),方向为 x x1 ta y y1 tb
相关文档
最新文档