五章图形变换与裁剪三

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
直线段裁剪(5/15)
待裁剪线段和窗口的关系
完全落在窗口内 完全落在窗口外 部分在内,部分在外
7
直线段裁剪(6/15)
为提高效率,算法设计时应考虑: 1. 快速判断情形(1)(2); 2. 设法减少情形(3)求交次数和每次求交时所需的计算量
8
直线段裁剪(7/15)
Cohen-Sutherland 算法 (编码算法)
当Q为空集时,线段AB不可能在窗口中有可见线段。 当Q不为空集时,Q可看成是一个一维窗口
15
直线段裁剪(14/15)
Liang-Barsky裁剪算法
ymax P4
存在可见线段的充要条件
P3
B
U
S
AB RSTU不为空集
ymin P1
A T
L
R xmin
P2
xmax
AS是一维窗口TS中的可见部分
xmx amx ,im n[ x iA n ,xB ()m , x iTn ,xU ()] xmx im n,am [x x aA,x xB)(m , x aT,x xU)(]
16
直线段裁剪(15/15)
Liang-Barsky裁剪算法
AB有可见部分的充分必要条件也可表示为
m x m , m a ix A n , x B x ) i m , n x [ T , x U ) ( i m ] n x m , m ( i a x A n x , x B ) a m [ ,x T x , x U ) a (
分割处理策略:
将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所 在直线的裁剪。
流水线过程(左上右下):左边的结果是右边的开始。
亦称逐边裁剪算法
20
Sutherland-Hodgman算法-2/4
内侧空间与外侧空间 多边形的边与半空间的关系
当前裁剪边
当前裁剪边
可见一侧
可见一侧
Pi Pi+1
1 当xxmax 1 当xxmin
Cr 0 else
Cl 0 else
10
直线段裁剪(9/15)
Cohen-Sutherland 算法
端点编码:
定义为它所在区域的编码
结论:
当线段的两个端点的编码的逻辑“与”非零时 ,显然不可见
1001
a
0001
1000 1010
窗口
0000 b
0010
c
0101 0100 0110
图2 原来封闭的多边形变成了孤立的线段
边界不再封闭,需要用窗口边界的恰当部分来封闭它
18
多边形裁剪-2/2
1 2
(a)
31 2
(b)
A
B
(c)
分裂为几个多边形
图3 裁剪后的多边形顶点形成的几种情况
关键:
不仅在于求出新的顶点,删去界外顶点 还在于形成正确的顶点序列
19
Sutherland-Hodgman算法-1/4
1)特点:用编码方法可快速判断线段-完全可见和显然不可见。
2)特别适用二种场合: 大窗口场合 窗口特别小的场合
13
直线段裁剪(12/15) 中点分割法
基本思想:
从P0点出发找出距P0最近的可见点 从P1点出发找出距P1最近的可见点 不断地在中点处将线段一分为二,对每段线段重复Cohen-
Sutherland裁剪算法的线段可见性测试方法,直至找到每段线段与 窗口边界线的交点或分割子段的长度充分小可视为一点为止 取中点Pm=(P1+P2)/2。
裁剪过程是递归的。
9
直线段裁剪(8/15)
Cohen-Sutherland 算法
特点:
对显然不可见线段的快速判别
编码方法:
由窗口四条边所在直线把二维平面分成9个区域,每个区域赋予一个四 位编码, CtCbCrCl,上下右左;
1 当yymax 1 当yymin
Ct 0 else
Cb 0 else
向x轴投影,就得到可见线段上点的坐标的变化范围为
m x m , m a i x A n , x B x ) m i, n x T [ , x U ) i ( x ] n m x m ( , m i a x A n , x x B ) a m [ , x T x , x U ) a ( ]x
左端点 右端点
A
T
L xminR
P2 xmax
AS是一维窗口TS中的可见部分
Q L 口 P 1 P 2 P 3 P 4 L [ x m , x m i ; n , a] x [ , ; y m , y m i ] n ax ( L [ x m ,x m i; n a , x ] ( ) L [ , ; y m ,y m i] n a R) Sx TU
11
直线段裁剪(10/15)
Cohen-Sutherland 算法
对于那些非完全可见、又非完全不可见的线段,需要 求交,求交前先测试与窗口哪条边所在直线有交? (按序判断端点编码中各位的值ClCtCrCb)
求交测试顺序固定(左上右下) 最坏情形,线段求交四次。
12
Coh直en线-S段uth裁er剪lan(d11算/1法5的) 特点
L mx a m,x m in[xA i,n xB )(] Rmx im n ,am x [ x aA ,x x B)(]
LR
L
max(
xT
, xU
)
min( xT , xU ) R
17
多边形裁剪-1/2
用直线段裁剪算法,可以吗?
新的问题:
A B
A B
图1 因丢失顶点信息而去法确定裁剪区域
算法步骤:
第一步 判别线段两端点是否都落在窗口内,如果是, 则线段完全可见;否则进入第二步;
第二步 判别线段是否为显然不可见,如果是,则裁 剪结束;否则进行第三步 ;
第三步 求线段与窗口边延长线的交点,这个交点将 线段分为两段,其中一段显然不可见,丢弃。 对余下的另一段重新进行第一步,第二步判断, 直至结束
Pi
Pi+1
当前裁剪边
可见一侧 Pi+1
Pi
当前裁剪边
可见一侧
Pi+1
Pi
窗口
(a) 输出Pi+1
窗口
(a) 无输出
窗口
(a) 输出I
窗口
(a) 输出I和Pi+1
线段与当前裁剪边的位置关系
21
Sutherland-Hodgman算法-3/4
P2
P2
P1
P2是离P1点最远的可见点
Pm
P1
用P1Pm代替P1P2
P2 Pm P1
用PmP2代替P1P2
14
直线段裁剪(13/15)
Liang-Barsky裁剪算法
基本思想:
把二维裁剪化为一维裁剪问题,并向x (或y)方向投影以决定可见线段。
直线L与区域的交:
ymax P4
P3
B
U
ห้องสมุดไป่ตู้
S
ymin P1
相关文档
最新文档