工程计算机图形学 第六章 图形学裁剪算法
DESCRIPTION
工程计算机图形学 第六章 图形学裁剪算法. 浙江大学工程及计算机图学所. 1. 6.1 矩形窗口线裁剪. 直接求交算法; Cohen-Sutherland 算法; 中点分割裁剪算法; Nicholl-Lee-Nicholl 算法; 梁友栋 -Barsky 算法. 拓展算法:二次及多次编码技术. 2. (x R ,y T ). (x L ,y B ). 点的裁剪. 6.1 矩形窗口线裁剪. 图形裁剪中最基本的问题。 - PowerPoint PPT PresentationTRANSCRIPT
工程计算机图形学第六章 图形学裁剪算法
浙江大学工程及计算机图学所
SHU Graphics & Image Group1
工程及计算机图形学
6.1 矩形窗口线裁剪
•直接求交算法;•Cohen-Sutherland 算法;•中点分割裁剪算法;•Nicholl-Lee-Nicholl 算法;•梁友栋 -Barsky 算法•拓展算法:二次及多次编码技术
2浙江大学工程及计算机图学所
工程及计算机图形学
点的裁剪 图形裁剪中最基本的问题。 假设窗口的左下角坐标为
(xL,yB), 右上角坐标为(xR,yT) ,对于给定点P(x,y),则 P 点在窗口内的条件是要满足下列不等式:xL <= x <= xR
yB <= y <= yT
否则, P 点就在窗口外。
(xL,yB )
(xR,yT )
3浙江大学工程及计算机图学所
6.1 矩形窗口线裁剪
图 6-1-1
工程及计算机图形学
直线与窗口边都写成参数形式,求参数值。
4浙江大学工程及计算机图学所
6.1.1 直接求交算法
图 6-1-2
工程及计算机图形学
基本思想:对于每条线段 P1P2 分为三种情况处理 :
( 1 )若 P1P2 完全在窗口内,则显示该线段 P1P2 。( 2 )若 P1P2 明显在窗口外,则丢弃该线段。( 3 )若线段不满足( 1 )或( 2 )的条件,则在
交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。
为快速判断,采用如下编码方法:
5浙江大学工程及计算机图学所
6.1.2 Cohen-Sutherland 裁剪算法
工程及计算机图形学
实现方法:
将窗口边线两边沿长,得到九个区域,每一个区域都用
一个四位二进制数标识,直线的端点都按其所处区域赋予相应的区域码,用来标识出端点相对于裁剪矩形边界的位置。
1001
0001
0101
1000
0000
0100
1010
0010
0110
A
B
CD
6浙江大学工程及计算机图学所
图 6-1-3
6.1.2 Cohen-Sutherland 裁剪算法
工程及计算机图形学
将区域码的各位从右到左编号,则坐标区域与各位的关系为:
上 下 右 左 X X X X任何位赋值为 1 ,代表端点落在相应的位置上,否则该位为 0 。若端点在剪取矩形内,区域码为 0000 。如果端点落在矩形的左下角,则区域码为 0101 。
7浙江大学工程及计算机图学所
图 6-1-4
6.1.2 Cohen-Sutherland 裁剪算法
工程及计算机图形学
一旦给定所有的线段端点的区域码,就可以快速判断哪条直线完全在剪取窗口内,哪条直线完全在窗口外。所以得到一个规律:
8浙江大学工程及计算机图学所
图 6-1-5
6.1.2 Cohen-Sutherland 裁剪算法
工程及计算机图形学
若 P1P2 完全在窗口内 code1=0,且 code2=0, 则“取”
若 P1P2 明显在窗口外 code1&code2≠0 ,则“弃” 在交点处把线段分为两段。其中一段完全在窗口外,可
弃之。然后对另一段重复上述处理。
编码 线段裁剪
1001 1000 1010
0001 0000 0010
0101 0100 011 0
P 1
P 2
P 3
P 4
9浙江大学工程及计算机图学所
图 6-1-6
6.1.2 Cohen-Sutherland 裁剪算法
工程及计算机图形学
如何判定应该与窗口的哪条边求交呢? 编码中对应位为 1 的边。
计算线段 P1(x1,y1)P2(x2,y2) 与窗口边界的交点if(LEFT&code !=0){ x=XL; y=y1+(y2-y1)*(XL-x1)/(x2-x1);}else if(RIGHT&code !=0){ x=XR; y=y1+(y2-y1)*(XR-x1)/(x2-x1);}else if(BOTTOM&code !=0)
{ y=YB; x=x1+(x2-x1)*(YB-y1)/(y2-y1);} else if(TOP & code !=0) { y=YT; x=x1+(x2-x1)*(YT-y1)/(y2-y1);}
10浙江大学工程及计算机图学所
6.1.2 Cohen-Sutherland 裁剪算法
工程及计算机图形学
本算法的优点在于简单,易于实现。他可以简单的描述为将直线在窗口左边的部分删去,按左,右,下,上的顺序依次进行,处理之后,剩余部分就是可见的了。在这个算法中求交点是很重要的,他决定了算法的速度。另外,本算法对于其他形状的窗口未必同样有效。
特点:用编码方法可快速判断线段的完全可见和显然不可见。
小结
浙江大学工程及计算机图学所
6.1.2 Cohen-Sutherland 裁剪算法
工程及计算机图形学
基本思想:从 P0 点出发找出离 P0 最近的可见点,和从 P1 点出发找出离 P1 最近的可见点。这两个可见点的连线就是原线段的可见部分。
与 Cohen-Sutherland 算法一样首先对线段端点进行编码,并把线段与窗口的关系分为三种情况,对前两种情况,进行一样的处理;对于第三种情况,用中点分割的方法求出线段与窗口的交点。 A 、 B 分别为距P0 、 P1 最近的可见点, Pm为 P0P1 中点。
P 0
P 1
PmA
B
12浙江大学工程及计算机图学所
6.1.3 中点分割裁剪算法
图 6-1-7
工程及计算机图形学
从 P0 出发找距离 P0 最近可见点采用中点分割方法 先求出 P0P1 的中点 Pm, 若 P0Pm 不是显然不可见的,并且 P0P1 在窗口中有可
见部分,则距 P0 最近的可见点一定落在 P0Pm 上,所以用 P0Pm 代替 P0P1 ;
否则取 PmP1 代替 P0P1 。 再对新的 P0P1 求中点 Pm 。重复上述过程,直到
PmP1 长度小于给定的控制常数为止,此时 Pm 收敛于交点。
从 P1 出发找距离 P1 最近可见点采用上面类似方法。
P 0
P 1
PmA
B
13浙江大学工程及计算机图学所
6.1.3 中点分割裁剪算法
图 6-1-8
工程及计算机图形学 浙江大学工程及计算机图学所
图 6-1-9
6.1.3 中点分割裁剪算法
14
工程及计算机图形学
小结 对分辩率为 2N*2N 的显示器,上述二分过程至
多进行 N 次。 主要过程只用到加法和除法运算,适合硬件实
现,它可以用左右移位来代替乘除法,这样就大大加快了速度。
15浙江大学工程及计算机图学所
6.1.3 中点分割裁剪算法
工程及计算机图形学
基本想法:对 2D 平面的更细的划分。
16浙江大学工程及计算机图学所
6.1.4Nicholl-Lee-Nicholl 算法
图 6-1-10
工程及计算机图形学
假定待裁剪线段 P0P1 为非完全可见且非显然不可见。步骤:第一步,窗口四边所在的直线将二维平面划分成 9
个区域,假定落在区域 0、 4、 5
P0
17浙江大学工程及计算机图学所
6.1.4Nicholl-Lee-Nicholl 算法
图 6-1-11
工程及计算机图形学
第二步:从P0点向窗口的四个角点发出射线,这四条射线和窗口的四条边所在的直线一起将二维平面划分为更多的小区域 。
此时 P1 的位置决定了 P0P1 和窗口边的相交关系。
18浙江大学工程及计算机图学所
图 6-1-12
6.1.4Nicholl-Lee-Nicholl 算法
工程及计算机图形学
第三步,确定 P1 所在的区域(判断 P1 所在区域位置,可判定 P0、 P1 与窗口那条边求交 ) 。
根据窗口四边的坐标值及 P0P1 和各射线的斜率可确定 P1 所在的区域。
第四步,求交点,确定 P0P1 的可见部分 。
特点:效率较高,但仅适合二维矩形窗口。
19浙江大学工程及计算机图学所
6.1.4Nicholl-Lee-Nicholl 算法
工程及计算机图形学
设要裁剪的线段是 P0P1 。 P0P1 和窗口边界交于 A,B,C,D 四点,见图。算法的基本思想是从 A,B和 P0 三点中找出最靠近的 P1 点,图中要找的点是 P0 。从 C,D和 P1 中找出最靠近 P0 的点。图中要找的点是 C点。那么 P0C 就是 P0P1 线段上的可见部分。
20浙江大学工程及计算机图学所
6.1.5 梁友栋 -Barsky 算法
图 6-1-13
工程及计算机图形学
线段的参数表示x=x0+t△x
y=y0+t△y 0<=t<=1
△x=x1-x0 △y=y1-y0
窗口边界的四条边分为两类:始边和终边。
为始边。为终边,若为终边。为始边,若
为始边。为终边,若为终边。为始边,若
TB
TB
RL
RL
yyyyy
yyyyy
xxxxx
xxxxx
0
0
0
0
21浙江大学工程及计算机图学所
6.1.5 梁友栋 -Barsky 算法
工程及计算机图形学
求出 P0P1 与两条始边的交点参数 t0, t1 , 令 tl=max(t0 ,t1,0) ,则tL即为三者中离 p1 最近的
点的参数 求出 p0p1 与两条终边的交点参数 t2, t3, 令 tu=min(t2,t3,1) ,则tU即为三者中离 p0 最近的
点的参数 若 tu > tl, 则可见线段区间 [tl , tu]
交点计算
t0t1
t2t3
0
1
22浙江大学工程及计算机图学所
图 6-1-14
6.1.5 梁友栋 -Barsky 算法
工程及计算机图形学
始边和终边的确定及交点计算:令 QL= - △x DL= x0-xL
QR= △x DR= xR-x0
QB= - △y DB= y0-yB
QT= △y DT= yT-y0
交点为 ti= Di / Qi , i=L,R,B,T
Qi <0 ti 为与始边交点参数Qi >0 ti 为与终边交点参数
Qi =0 Di <0 时 , 线段不可见
Di >0 时 , 分析另一 D,
E
F
A
B
23浙江大学工程及计算机图学所
图 6-1-15
图 6-1-16
6.1.5 梁友栋 -Barsky 算法
工程及计算机图形学
当 Qi =0 时
若 Di <0 时 , 线段不可见
(如图中 AB ,有 QR=0, DR<0 )
若 Di >0 时 , 分析另一 D, (如图中的 EF 就是这种情况,它使
QL=0, DL>0和 QR=0, DR>0 。这时由于EF和 x=xL及 x=xR平行,故不必去求出 EF和 x=xL及 x=xR 的交点,而让 EF和 y=yT及y=yB 的交点决定直线段上的可见部分。)
E
F
A
B
24浙江大学工程及计算机图学所
6.1.5 梁友栋 -Barsky 算法
图 6-1-17
工程及计算机图形学
裁剪算法的本质:尽快求出交点 ……
尽量避免求交
在传统编码技术基础上进行二次编码,
尽可能多地舍弃窗外线段、减少求交。
25浙江大学工程及计算机图学所
6.1.6 传统算法拓展
图 6-1-18
工程及计算机图形学
二次编码技术
A
B C
D
E
F
基于传统编码:A —— 完全可见,保留B —— 完全不可见,舍弃C —— 不取不弃,求交
基于二次编码:A —— 完全可见,保留B —— 完全不可见,舍弃C —— 完全不可见,舍弃
新窗口包容原窗口
26浙江大学工程及计算机图学所
图 6-1-19
6.1.6 传统算法拓展
工程及计算机图形学
二次编码技术
将原窗口扩大旋转 450 形成新窗口,重新把平面分为九个区域,并类似得进行编码,可快速抛弃C 类线段。
易得 450 旋转窗口编码程序:
A
B C
D
E
F
图 6-1-20 新窗口包容原窗口
#define LEFT1 if (x+y-YB<XL) code=code | LEFT;
#define RIGHT2 else if (x+y-YT<XR) code=code | RIGHT;
#define BOTTOM4 if (y-x+XR<YB) code=code | BOTTOM;
#define TOP8 else if (y-x+XL>YT) code=code | TOP;
Code = 0; return code;
27浙江大学工程及计算机图学所
6.1.6 传统算法拓展
工程及计算机图形学
开始
传统窗口一次编码
能取舍吗
有一端点在窗内吗
窗口几何变换二次编码
能舍弃吗
线段几何变换裁剪
裁剪是否结束
结束
能
否是
能
否
否
是
否
28
6.1.6 传统算法拓展
图 6-1-21
浙江大学工程及计算机图学所
工程及计算机图形学
效果分析 A B
CD
E F
G
H
IJ
K
LM N
OP
Q
R S
T
U
VW
X
Y
ZtW W
a
bc
d
1. CS 算法排除区域面积比例
( 1) 4 个矩形形区域部分: (ABLG, AEDJ,DKHC, ICBF)
( 2 )重叠部分 (AEML, BGNF, CIOH,DKPJ)
( 3 )完全排除部分 (MNOP)
%1002
1
%1002
1
2
2
t
tWtW
tWWtWP
%100)2
1(
%10022
2
4
2
t
t
tWtW
WtWWtWP
%100)
1(%1003 4
2
2
2
ttW
WP %100]
1)1
1(4
1)1
1[(
324141
442
ttt
PPPMCS 算法排除区域面积比例
29浙江大学工程及计算机图学所
6.1.6 传统算法拓展
图 6-1-22
工程及计算机图形学
效果分析A B
CD
E F
G
H
IJ
K
LM N
OP
Q
R S
T
U
VW
X
Y
ZtW W
a
bc
d
t 5 10 100 1000 Infinite
M1 53.9% 64.6% 74.0% 74.9% 75%
M2 11.1% 23.2% 46.2% 49.6% 50%
2. 45°旋转窗口排除区域面积比例
( 1 )完全落在( XLM, ESM )或 ( QKP ,JVP )或( WIO , THO )或( RFN , UGN )
故在 CS 算法后, 45° 旋转窗口还能排除线段的比例
%100)1
(32
1
%1008
21
4
2
2
2
t
t
tW
WtWQ
%1001
)1
1(4
1)1
1(1
)1
1(8
111
142
442
4
ttt
t
M
QM
算法需要分析其效率!30浙江大学工程及计算机图学所
图 6-1-23
6.1.6 传统算法拓展
工程及计算机图形学
多次编码技术
c
b
a
x yz
•二次编码技术以 450 静态窗口对线段进行过滤,为了扩展动态范围滤除更多窗外线段,可以采用多次编码技术。•基于窗口变换的过滤技术的选取课选择合适的窗型。
31浙江大学工程及计算机图学所
图 6-1-24
6.1.6 传统算法拓展
工程及计算机图形学
6.2 多边形窗口线裁剪
参数化算法 (Cyrus-Beck)
算法拓展:多边形顶点编码裁剪算法
32浙江大学工程及计算机图学所
工程及计算机图形学
考虑凸多边形区域 R 和直线段 P1P2
P(t)=(P2-P1)*t+P1
设 A 是区域 R 的边界上一点,N 是区域边界在 A 点的内法线向量
P2
A
R
N
P1
则对于线段 P1P2 上任一点 P(t)
• N ·(P(t)-A)<0 -> 外侧• N ·(P(t)-A)>0 -> 内侧• N ·(P(t)-A)=0 -> 边界或其延长线上
33浙江大学工程及计算机图学所
6.2.1 参数化算法 (Cyrus-Beck)
图 6-2-1
工程及计算机图形学
k 条边的多边形,可见线段参数区间的解 : Ni· (p(t)-Ai)>=0, i=0,…,k, 0≤t ≤1.
代入 P(t)=(P2-P1)*t+P1 得: Ni· (P1-Ai)+ Ni· (P2-P1) t>=0
1212
12
112
12
112
0
0
0
PPNPPNPPN
APNtPPN
PPN
APNtPPN
ii
i
iii
i
iii
34浙江大学工程及计算机图学所
6.2.1 参数化算法 (Cyrus-Beck)
工程及计算机图形学
Ni· (P2-P1) =0 则线段平行于对应边。 此时判断 Ni· (P1-Ai)
若 Ni· (P1-Ai) <0 则 P1 P2 在多边形外侧,不可见; 若 Ni· (P1-Ai) >0 则 P1 P2 在多边形内侧,继续其它边
的判断。
35浙江大学工程及计算机图学所
6.2.1 参数化算法 (Cyrus-Beck)
图 6-2-2
工程及计算机图形学
对于 t 值的选择:首先,要符合 0≤t≤1 ;其次,对于凸窗口来说,每一个线段与其至多有两个交点,即有两个相应的 t 值。所以我们可以把计算出的 t 值分成两组:一组为下限组,是分布在线段起点一侧的;一组为上限组,是分布在线段终点一侧的。这样,只要找出下限组中的最大值及上限组中的最小值,就可确定线段了。
分组的依据是: 如果 Ni· (P2-P1) < 0 ,则计算出的值属于上限组 如果 Ni· (P2-P1) > 0 ,则计算出的值属于下限组
浙江大学工程及计算机图学所 36
6.2.1 参数化算法 (Cyrus-Beck)
工程及计算机图形学
因此,线段可见的交点参数: tl=max{0,max{ti: Ni· (P2-P1) >0}}
tu=min{1,min{ti: Ni· (P2-P1)<0}} 若 tl <= tu, [tl , tu] 是可见线段的交点参数区间,
否则,线段不可见。
浙江大学工程及计算机图学所 37
6.2.1 参数化算法 (Cyrus-Beck)
工程及计算机图形学
• 对于多边形窗口的裁剪,关键是能否快速的判断出窗口边界是否与被裁直线存在交点。•基于多边形窗口分区编码的裁剪算法,该算法首先以被裁剪直线为参照系,将多边形窗口划分为正区、负区和近零区三类区域;然后通过对多边形窗口顶点的编码来快速地求出交点。
浙江大学工程及计算机图学所 38
6.2.2 算法拓展
工程及计算机图形学
( 1 )对多边形窗口分区
浙江大学工程及计算机图学所 39
图 6-2-3
6.2.2 算法拓展
工程及计算机图形学
( 2 )对多边形窗口顶点编码
顶点落在负区 则 fi = -1 ;
顶点落在负区 则 fi = 1 ;
顶点落在近零区 方程 判断bkxy
浙江大学工程及计算机图学所 40
6.2.2 算法拓展
图 6-2-4
工程及计算机图形学
( 3 )快速裁剪基于裁剪直线的窗口顶点编码技术
•极限点位置判断法•编码之和判断法
若满足( 1 )式,则窗口边与被裁剪直线不相交;若满足( 2 )式,则窗口边与被裁剪直线存在交点;若满足( 3 )式,则窗口边或顶点与被裁剪直线处于特殊位置。
对于多边形窗口的任意一边,其端点编码和有如下的三种关系
( 1)( 2 )
( 3 )
浙江大学工程及计算机图学所 41
图 6-2-5
6.2.2 算法拓展
工程及计算机图形学
( 3 )特殊情况快速处理
•被裁直线通过多边形窗口的顶点
•被裁直线与窗口的某一边重合
浙江大学工程及计算机图学所 42
图 6-2-6
图 6-2-7
6.2.2 算法拓展
工程及计算机图形学
算法框图
效率分析
浙江大学工程及计算机图学所 43
图 6-2-8
6.2.2 算法拓展
工程及计算机图形学
6.3 矩形窗口的多边形裁剪
参数化算法 (Cyrus-Beck)
算法拓展:多边形顶点编码裁剪算法
浙江大学工程及计算机图学所 44
工程及计算机图形学
错觉:直线段裁剪的组合? 新的问题:1 )边界不再封闭,需要用窗口边界的恰当部分来封闭它,
如何确定其边界?
浙江大学工程及计算机图学所 45
6.3 矩形窗口的多边形裁剪
图 6-3-1
工程及计算机图形学
2 )一个凹多边形可能被裁剪成几个小的多边形,如何确定这些小多边形的边界?
浙江大学工程及计算机图学所 46
6.3 矩形窗口的多边形裁剪
图 6-3-2
工程及计算机图形学
分割处理策略:将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪。
流水线过程 ( 左上右下 ) :左边的结果是上边的开始。
亦称逐边裁剪算法
浙江大学工程及计算机图学所 47
6.3.1 Sutherland-Hodgman 算法
图 6-3-3
工程及计算机图形学
内侧空间与外侧空间 多边形的边与半空间的关系
浙江大学工程及计算机图学所 48
图 6-3-4
6.3.1 Sutherland-Hodgman 算法
工程及计算机图形学
裁剪结果的顶点构成: 裁剪边内侧的原顶点; 多边形的边与裁剪边的交点。 顺序连接
几点说明:裁剪算法采用流水线方式, 适合硬件实现。可推广到任意凸多边形裁剪 窗口
浙江大学工程及计算机图学所 49
6.3.1 Sutherland-Hodgman 算法
图 6-3-5
工程及计算机图形学
裁剪窗口为任意多边形(凸、凹、带内环)的情况:
主多边形:被裁剪多边形,记为 A 裁剪多边形:裁剪窗口,记为 B
浙江大学工程及计算机图学所 50
6.3.1 Weiler-Athenton 算法
图 6-3-6
工程及计算机图形学
主多边形和裁剪多边形把二维平面分成两部分。
内裁剪: A∩B 外裁剪: A-B
裁剪结果区域的边界由 A 的部分边界和 B 的部分边界两部分构成,并且在交点处边界发生交替,即由 A 的边界转至 B 的边界,或由 B 的边界转至 A 的边界
浙江大学工程及计算机图学所 51
图 6-3-7
6.3.1 Weiler-Athenton 算法
工程及计算机图形学
如果主多边形与裁剪多边形有交点,则交点成对出现,它们被分为如下两类: 进点:主多边形边界由此进入裁剪多边形内 如, I1,I3, I5, I7, I9, I11 出点:主多边形边界由此离开裁剪多边形区域 .
如, I0,I2, I4, I6, I8, I10
浙江大学工程及计算机图学所 52
图 6-3-8
6.3.1 Weiler-Athenton 算法
工程及计算机图形学
Weiler_Athenton 裁剪算法(内裁剪)步骤:1 、建立主多边形和裁剪多边的顶点表.2 、求主多边形和裁剪多边形的交点,并将这些交点按顺序插入两多边形的顶点表中。在两多边表形顶点表中的相同交点间建立双向指针 。3 、裁剪 如果存在没有被跟踪过的交点,执行以下步骤: (1) 建立裁剪结果多边形的顶点表. (2) 选取任一没有被跟踪过的交点为始点,将其输出到结果多边形顶点表中. (3) 如果该交点为进点,跟踪主多边形边边界;否则跟踪裁剪多边形边界. (4) 跟踪多边形边界,每遇到多边形顶点,将其输出到结果多边形顶点表中,直至遇到新的交点. (5) 将该交点输出到结果多边形顶点表中,并通过连接该交点的双向指针改变跟踪方向(如果上一步跟踪的是主多边形边界,现在改为跟踪裁剪多边形边界;如果上一步跟踪裁剪多边形边界,现在改为跟踪主多边形边界). (6) 重复 (4)、 (5) 直至回到起点
浙江大学工程及计算机图学所 53
6.3.1 Weiler-Athenton 算法
工程及计算机图形学
交点的奇异情况处理
1 、与裁剪多边形边重合的主多边形的边不参与求交点;2 、对于顶点落在裁剪多边形的边上的主多边的边,如果落
在该裁剪边的内侧,将该顶点算作交点;而如果这条边落在该裁剪边的外侧,将该顶点不看作交点
浙江大学工程及计算机图学所 54
6.3.1 Weiler-Athenton 算法
图 6-3-9
工程及计算机图形学
算法思路拓展 引入二次编码,舍弃不必求交的边
二次编码还可以用在其他场合吗??
浙江大学工程及计算机图学所 55
6.3 矩形窗口的多边形裁剪
图 6-3-10
工程及计算机图形学
1 .经典算法介绍, SZZ 算法和 HMF 算法
第一类直线段判别
=
第一类直线段和圆关系 第二类直线段和圆关系
浙江大学工程及计算机图学所 56
6.4圆形窗口的直线与多边形裁剪
图 6-4-1
工程及计算机图形学
min(y1, y2)≥yo+r;max(y1, y2)≤yo-r;min(x1, x2)≥xo+r;max(x1, x2)≤xo-r;
1 2 1 2 1 11 21 2 2
1 1 2 1 2 1
( )( ) ( )( )
| | ( ) ( )
o ox x y y x x y yPPd PC
PP x x y y
第一类直线段处理
6.4.1圆形窗口的直线裁剪
工程及计算机图形学
第二类直线段的处理
方法一 矢量法求交点
P1P2 =( x2-x1, y2-y1, 0 ),
令 V=( y2-y1, x1-x2, 0 ),
则 V⊥P1P2 ,CP1=( x1-xo, y1-yo, 0 )
方法二 增量法求交点
2222 DrDdABPBPAL POp
浙江大学工程及计算机图学所 58
图 6-4-2
图 6-4-3
6.4.1圆形窗口的直线裁剪
工程及计算机图形学
算法思路的拓展 —— 尽量避免无效的求交,尽量快速的求取有效交点。
•基于多重编码的新颖的线裁剪算法
第一重编码:常规外切正方形一次编码
第二重编码:旋转外切正方形二次编码
code( P1) & code( P2) != 0
浙江大学工程及计算机图学所 59
图 6-4-4
6.4.1圆形窗口的直线裁剪
工程及计算机图形学
第三重编码:广义距离三次编码
定义 fi=sgn|di-R| 为广义距离编码
f1+f2 < 0 or ( f1 == 0 ) && ( f2 == 0 ) f1+f2 == 0 && ( f1!=0 ) || ( f2! = 0 ) f1+f2 == 1 f1+f2 == 2
flag=[( x2-x1) x1 +( y2-y1) y1]×[( x2-x1) x2 +( y2-y1) y2]
当 flag ≥ 0 ,则为窗外线段,如线段 a 、线段 b 和线段 g ;当 flag < 0 ,则为可能与窗口相交线段,如线段 e 、线段 f 和线段 h 。若 flag < 0 ,还需继续进行判别,这些线段仍有可能是窗外线段,如线段 f 。
浙江大学工程及计算机图学所 60
图 6-4-5
6.4.1圆形窗口的直线裁剪
工程及计算机图形学
经典算法
顶点 pi 的入边
顶点 pi 的出边 p1 入 p2p3 出 p3 入 p4p5p6 出 p6 入
p0 出
sin
cos
ry
rx( 0≤θ≤2π ) (0≤t≤1)
Ait2+2Bit+C=0 其中, Ai=(xi+1-xi)2+(yi+1-yi)2, Bi=xi(xi+1-xi)+yi(yi+1-yi) , Ci=xi
2+yi2-R2,
iii
iii
ABt
ABt
/)(
/)(
2
1
浙江大学工程及计算机图学所 61
6.4.2圆形窗口的多边形裁剪
图 6-4-6
工程及计算机图形学
算法思路拓展 a
c
b
d
f
eg
d
a
c
b
f
eg
1000
1010
0010
0110
0100
0101
0001
1001
0000
(a) ( b ) (c) (d)
Pi和 Pi+1 ,计算它们的广义距离 di 和 di+1 ,根据 di 和 di+1与 R( R=r2 )之间的关系将剩余多边形的边分为四类
max{di,di+1}≤R min{di,di+1}<R
max{di,di+1}>R
min{di,di+1}=R
max{di,di+1}>R
浙江大学工程及计算机图学所 62
图 6-4-7
图 6-4-8
6.4.2圆形窗口的多边形裁剪
工程及计算机图形学
45° 的直线的斜率 k为 1 y=x+b ,消去了乘法运算
1.包围盒编码取舍线段 (1)常规包围盒一次编码取舍线段
位置关系可转化为 6 位二进制代码表示,从高位到低位,依次表示的方位为上、下、右、左、后、前。
(2) 新型包围盒二次编码舍弃线段
(3)包围盒与线段分类
浙江大学工程及计算机图学所 63
6.5 三维立方体的线裁剪
图 6-5-1
工程及计算机图形学
2.包围盒编码取舍线段
Y
Z
X
( 1 ) 常规包围盒编码分区8 个角域, 12 个边域和 6 个面域以及 1 个窗体 ,有三位为 1 ,属于角域,二位为 1 ,则属于边域,一位为 1 ,属于面域。采用移位运算符( >>和 << )判断高位或低位是否为 1 。
( 2 )基于编码分区的几何变换求交任何一个区域经过适当的几何变换,最终都可以映射到三个基本区域中去。
通过线段端点编码与裁剪窗体各个面逻辑与( & )运算,如果所得值为真,则与此面求交,通过逐一求交并比较排除冗余交点,最终确定唯一有效交点。
浙江大学工程及计算机图学所 64
图 6-5-2
6.5 三维立方体的线裁剪