计算机图形学二维图形的裁剪

合集下载

二维图形裁剪

二维图形裁剪

te ∈[0,1]
P ( x0 , y0 ) P ( x1 , y1 ) 和矩形窗口下边的交点满足方程组 0 1 x0 + tl ( x1 - x0 ) = xmin + te ( xmax - xmin ) tl ∈[0,1] te ∈[0,1] y0 + tl ( y1 - y0 ) = ymin
P0在窗口内?

Y
P1在窗口内? N 求交点I, P0I既为 可见部分 Exit
Y

如何判断线段是 否显然不可见? 直线与窗口边如 何求交?
N P1在窗口内? Y P=P0 P0=P1 P1=P N P0P1显然不可见? Y N
P0P1完 全可见 Exit
N
P0P1与窗口有交? Y 求交点I0、I1, I0I1既为可见部分 Exit
18
2. Cohen-SutherLand算法-原理

如何判定应该与窗口的哪条边求交呢?

编码中对应位为1的边。
1000
1001
1010
0001
0000
0010
0101
0100
0110
19
2. Cohen-SutherLand算法-原理

按照左、右、下、上的顺序计算线段 P1(x1,y1)P2(x2,y2)与窗口边界的交点:
20
else if(BOTTOM&code !=0)
else if(TOP & code !=0)
2. Cohen-SutherLand算法-描述
BOOL done,draw; /*done: 完成;draw: 可见;*/ Unsigned char code1,code2; /*端点1,端点2的编码*/ While (!done) { if (判断code1,code2,若为第一种情况) { done = TRUE; draw = TRUE; } else if (为第二种情况) { done = TRUE; draw = FALSE; } else if (检查code1 ,若在窗口内) { 交换端点及端点的编码;以左,右,下,上的次序对端 点1进行判断及求交;将交点的值赋给端点1 } }/*End of while*/

图形学之二维裁剪

图形学之二维裁剪

30
主多边形和裁剪多边形把二维平面分成 两部分。 内裁剪:A∩B A 外裁剪:A-B
2010-12-31
Graphics Lab.PKU
31
进点:主多边形边界由此进入裁剪多边 形区域内:I1 I3 I5 I7 I9 I11 出点:I0 I2 I4 I6 I8 I10
2010-12-31
Graphics Lab.PKU
2010-12-31
Graphics Lab.PKU
24
2010-12-31
Graphics Lab.PKU
25
5.2.1 Sutherland-Hodgman算法 Sutherland-Hodgman算法
分割处理:将多边形关于矩形窗口的裁 剪分解为多边形关于窗口四边所在直线 的裁剪。 流水线处理:上边的结果是左边的开始。
第五讲 二维裁剪
基本目的:判断图形元素是否落在窗口 区域之内。 显示部分画面,指定图形内容,窗口系 统。地图显示。 图形编辑 图形裁剪算法,直接影响图形系统的效 率。
2010-12-31 Graphics Lab.PKU 1
二维裁剪
两个步骤:图元在窗口区域内外的判别;图形 元素与窗口的求交; 裁剪 扫描转换: 点阵图形在设备坐标系中进行,算法效率不高, 适合求交难度大的图形。 裁剪 扫描转换:
2010-12-31
Graphi P1
2010-12-31
Graphics Lab.PKU
21
k条边的多边形,可见线段参数区间的解: Ni· (p(t)-Ai)>=0, i=0,…,k, 0≤t ≤1. 即: Ni· (P1-Ai)+ Ni· (P2-P1) t>=0可得:ti=… 线段可见的交点参数: t1=max{0,max{ti: Ni· (P2-P1) >0}} t2=min{1,min{ti: Ni· (P2-P1)<0}} 若 t1<=t2, [t1,t2]是可见线段的交点参数 区间,否则,线段不可见。

CG11-二维图形裁剪

CG11-二维图形裁剪

二维裁剪:线段裁剪 线段裁剪处理的基础有两个方面:
● 对象裁剪方法 ● 其它裁剪方法
– 尤其是对不能确定的线段,要计算 它与裁剪边界的交点,再通过对线 段的端点进行“内 - 外检测”来处 理线段。
裁剪
裁剪后
线段裁剪举例
☆二维裁剪定义 线段P1P2 ☆点的裁剪 由下端点 P1 开始,依次按左、右、 P2 ☆线段裁剪 上、下边界对 P1 检查,发现端点位 ● 线段裁剪举例 P2’ ◘ 算法举例 于裁剪窗口下。
裁剪窗口
二维裁剪时机选择
☆二维裁剪定义
◘ 二维裁剪时机
裁剪算法可用于世界坐标系中, 世界坐标系下的裁剪只有窗口内的部分映射到设备 空间中,而将落在窗口外的图形部分删除。
☆点的裁剪 ☆线段裁剪 ● 线段裁剪举例 ● 线段编码裁剪 ● 梁 -Barsky 裁 剪 ● NLN直线裁剪 ● 非矩形窗口裁
基本认识:裁剪窗口是二维对象;线段是一维对 象,两个对象维数不同不便比较。 解决思路:将待裁剪线段及裁剪矩形窗口均看作 点集,那么,裁剪结果即为两点集的交集。
解决办法:
设:P1P2所在直线为L; 记:该直线(或其延长线)与裁剪窗口的两交点 为Q1Q2,称为Q1Q2诱导窗口,它是一维的。 P1P2 关于矩形窗口的裁剪结果与 P1P2 关于诱 导窗口的裁剪结果是一致的
◘ 区域码生成 ◘ 内外点判断 ◘ 算法举例 ◘ 算法举例(续)
– 根据线段端点的区域码,可快速判断线段是否完全在裁 剪窗口内或外:
完全在窗口边界内的线段两个端点的区域码均为0000;
两个端点区域码同样位置都为 1的线段完全在裁剪矩形外。
– 测试线段更好的方法是对两个端点的区域码进行逻辑与 操作:

计算机图形学第6章二维图形的裁剪

计算机图形学第6章二维图形的裁剪
第七章 二维图形的裁剪
• 重点:掌握二维图形点、线段、多边形和字符的裁剪算法 。
• 难点:理解二维图形的裁剪算法思想并且用C语言进行算法 的实现。
一、裁剪的意义 为了描述图形对象,我们必须存储它的全部信息,但有时为了达到分 区描述或重点描述某一部分的目的,往往将要描述的部分置于一个窗口内, 而将窗口外的部分“剪掉”,这个处理过程叫做裁剪,裁剪在计算机图形 处理中具有十分重要的意义。 裁剪实质上是从数据集合中抽取信息的过程,这个过程是通过一定的 计算方法来实现。
7.2.2 中点分割算法
二、中点分割算法实现: 1、将直线的两端点P1、P2编码得:C1、C2; 2、判别 根据C1和C2的具体值,可以有三种情况: (1)C1=C2=0,表明两端点全在窗口内,因而整个线段也在窗内, 应予保留。 (2)C1&C2≠0(两端点代码按位作逻辑乘不为0),即C1和C2至少 有某一位同时为1,表明两端点必定处于某一边界的同一外侧,因而整个线 段全在窗外,应予舍弃。 (3)不属于上面两种情况,均需要求交点。
如果上面四个不等式中任何一个不满足,则点(x,y)位于窗口之 外。 对于任意多边形窗口,需要根据多边形内点的判别准则进行判断。
7.2 线段的裁剪
直线段的裁剪比点复杂,其裁剪方法又是多边形裁剪和三维图形裁剪的 基础。 一、直线裁剪的基本思想 判断直线与窗口的位置关系: 1.确定直线是完全可见; 2.部分可见; 3.还是完全不可见。 对部分可见线段,求出它与窗口边界的交点,并将窗口内的线段输出。
一、中点分割算法思想: 1、中点公式
7.2.2 中点分割算法
2、中点分割法求交点的规则 如图中所示,当线段P1P2求出中点P后,舍弃线段的哪部分,由下面 两条规则决定:
中点分割法求交点规则

计算机图形学中的二维裁剪算法研究

计算机图形学中的二维裁剪算法研究

计算机图形学中的二维裁剪算法研究计算机图形学研究的是如何在计算机上制图,根据研究对象的不同又分为二维图形学和三维图形学。

二维图形学研究的范畴是点,线,面。

本文就是介绍计算机图形学中的众多基本算法之一的二维剪裁算法。

在二维剪裁算法中,椭圆形窗口线剪裁算法又是应用最为广泛的算法之一,所以将是本文重点论述的对象。

标签:计算机图形学;二维剪裁算法;椭圆形窗口线剪裁算法计算机图形学中的基本算法对于计算机图形学应用于实践有着重要的作用,而且算法需要时时更新才能够发挥出计算机图形学在实践中的作用。

本文对计算机二维剪裁算法进行介绍,并对其中的椭圆窗口线剪裁算法进行着重的研究分析,探讨如何使该算法更加的稳定高效,方便易行。

算法可以指导人们的工作与生活,所以笔者在本文通过坐标分析设计出一个算法以供读者参考。

1 二维剪裁算法的基本介绍剪裁算法是计算机图形学中的基础算法之一。

剪裁在日常生活和工作中的应用十分广泛,最典型的一个应用就是对整体场景中的局部目的物进行剪裁。

剪裁的过程其实就是将场景中的目的物标记圈出来,一般为矩形窗口框圈出。

矩形窗口框为闪动的虚线框,可以根据剪裁的目的物大小随意变换矩形框的大小。

此外具体说来,剪裁算法还有其他的形式。

如:点剪裁,线段剪裁,多边形剪裁,曲线及文字剪裁等。

现在笔者再详细介绍二维剪裁算法。

二维剪裁算法分为两种,一种是对线段的剪裁,一种是对多边形的剪裁。

因为线段和多边形往往是二维平面中的图形,故而使用二维剪裁算法对其进行剪裁。

目前对该领域的研究已经取得了很丰硕的成果,已经有很多成熟也高效实用的二维剪裁算法。

详细地来说,这些经典的算法有Cyrus—berk二维剪裁算法,Cohen—Sutherland二维多边形剪裁算法等等。

2 椭圆形窗口线剪裁算法的简介在计算机图形学中,椭圆形窗口线剪裁算法是十分重要的一种基础算法。

该算法之所以十分重要,笔者总结为两点原因:首先椭圆形是几何图形中最基础的图形之一,其次在我们的日常生活和工作当中有很多地方的剪裁工作是更适合椭圆形的(我们生活与工作之中,很少有标准的圆形目的物去剪裁,更多情况下是不规则的图像剪裁,而椭圆形可以更好的,更多的剪裁出合适的目的物)。

第五章 二维图形的裁剪

第五章 二维图形的裁剪
2010-7-21 计算机图形学 8
5.2.3 Cohen-Sutherland线段裁剪 线段裁剪
它的大概步骤如下所述. 它的大概步骤如下所述. 步骤1 判断线段的两个端点是否都在窗口内,如果是, 步骤 判断线段的两个端点是否都在窗口内,如果是, 则线段完全可见,显示该线段,裁剪结束; 则线段完全可见,显示该线段,裁剪结束;否则进入步 骤2 . 步骤2 判断线段是否为显然不可见,即线段的两个端 判断线段是否为显然不可见, 步骤 点均落在窗口某边所在直线的外侧,如果是, 点均落在窗口某边所在直线的外侧,如果是,删除该线 裁剪结束;否则进入步骤3. 段,裁剪结束;否则进入步骤 . 步骤3 求线段与窗口边所在直线的交点, 步骤 求线段与窗口边所在直线的交点,这个交点将待 裁剪的线段分成两部分,其中一部分显然不可见, 裁剪的线段分成两部分,其中一部分显然不可见,删除 对余下的另一部分线段重复步骤1, ,直至结束. 之;对余下的另一部分线段重复步骤 ,2,直至结束.
(d) 关于窗口右边裁剪
2010-7-21
(e) 关于窗口下边裁剪
16
计算机图形学
5.3.2 Weiler-Atherton算法 算法
在实际应用中,不仅待裁剪多边形是任意的,而且 在实际应用中,不仅待裁剪多边形是任意的, 要求裁剪窗口也需要是任意的,如图5.13所示. 所示. 要求裁剪窗口也需要是任意的,如图 所示
P5 P4 P3
P 1
P2
(a) 待裁剪多边形
(b) 关于窗口左边裁剪
(c) 关于窗口上边裁剪
2010-7-21
计算机图形学
15
5.3.1 Sutherland-Hodgman算法 算法
经窗口的右边裁剪后, 经窗口的右边裁剪后,得到多边形 PPPPPPPP P ,如图 0 1 2 3 4 5 6 7 0 5.12(d)所示;经窗口的下边裁剪后,得到最终的结果多边形 所示; 所示 经窗口的下边裁剪后, P PP P P P P P P ,如图 如图5.12(e)所示. 所示. (e)所示 0 1 2 3 4 5 6 8 0

二维图形的裁剪

二维图形的裁剪

直线y= yt和线段的交点上
直线x= xl和线段的交点上
2018/11/10 计算机科学与技术学院 13
第一种情况: xs x1 ( yb y1 )( x2 x1 ) /( y2 y1 ) y s yb 此时,若xl≤xs≤ xr 则(xs ys)为有效新起点。 第二种情况: xs x1 ( yt y1 )( x2 x1 ) /( y2 y1 ) y s yt 此时,若xl≤xs≤ xr 则(xs ys)为有效新起点。 第三种情况: x x l
裁剪的应用
从定义的场景中抽取用于观察的部分
在三维视图中识别出可见面 防止线段或对象的边界混淆
用实体造型来创建对象
显示多窗口的环境 允许选择图形的一部分来进行拷贝、移动或删除等绘图操作
裁剪算法类型
图形裁剪与窗口——视图变换的先后
窗口边界裁剪 视区边界裁剪
图形生成与裁剪先后
(xmax,ymax )
x min x x max
y min y y max
裁剪窗口(Xmin,Xmax,Ymin,Ymax)
是世界坐标系的窗口边界或视区边界
应用举例 爆炸场景或海面泡沫的显示
(xmin,ymin )
问题:对于任何多边形窗口,如何判别?
2018/11/10 计算机科学与技术学院 3
7 yb
5
2018/11/10
2
xl
计算机科学与技术学院
8
xr
11
排斥性测试 若线段满足下述四个条件之一时: max(x1,x2)≤xl
min(x1,x2)≥xr
max(y1,y2)≤yb min(y1,y2)≥yt 则线段必定位于窗口之外,无输出线段。 包含性测试

计算机图形学第7章二维图形的裁剪(2_3)

计算机图形学第7章二维图形的裁剪(2_3)

7.3.1 Sutherland-Hodgeman多边形裁剪 3、对多边形的n条边进行处理,对当前点号的考虑为:0~n-1。
for(i=0;i<n;i++) { if(当前第i个顶点是在边界内侧) /*对左边界:p[i][0]>=xmin */ { if(flag!=0) /*前一个点在外侧吗?*/ { flag=0;/*从外到内的情况,将标志置0,作为下一次循环的前一点标志*/ j++; q[j][0]=求出交点的x方向分量; /*将交点q放入新多边形*/ q[j][1]=求出交点的y方向分量; } j++; q[j][0]= p[i][0]; /*将当前点p放入新多边形*/ q[j][1]= p[i][1]; } else { if(flag==0) /*前一个点在内侧吗?*/ { flag=1;/*从内到外的情况,将标志置1,作为下一次循环的前一点标志*/ j++; q[j][0]=求出交点的x方向分量; /*将交点q放入新多边形*/ q[j][1]=求出交点的y方向分量; } } s[0]=p[i][0]; /*将当前点作为下次循环的前一点*/ s[1]=p[i][1]; }
7.2.3 梁友栋-Barsky裁剪算法
XWmin X 1 Xu ' XWmax X 1 Xu ' YWmin Y1 Yu ' YWmax Y1 Yu '
XWmin X 1 Xu '
这四个不等式可以表示为:
XWmax X 1 Xu ' YWmin Y1 Yu ' YWmax Y1 Yu '
7.2.3 梁友栋-Barsky裁剪算法

计算机图形学的裁剪算法

计算机图形学的裁剪算法

计算机图形学的裁剪算法
计算机图形学的裁剪算法是图形学的一种重要算法,它的基本思想是将一个完整的几何图形(如线段、多边形、圆圈等)按照指定的裁剪窗口(矩形)进行裁剪,只保留在窗口内的部分,而把窗口外的部分抛弃掉。

由于裁剪算法的应用非常广泛,像图形显示系统、图形设备接口(GDI)和图形处理器(GPU)等都广泛使用裁剪算法。

计算机图形学的裁剪算法可以分为两种:2D裁剪算法和
3D裁剪算法。

2D裁剪算法是基于二维空间的,它将一个几何
图形投影到一个平面上,然后按照指定的窗口裁剪;而3D裁
剪算法是基于三维空间的,它将一个几何图形投影到一个三维空间,然后按照指定的窗口裁剪。

2D裁剪算法的基本步骤如下:首先,将要裁剪的几何图
形投影到平面上;其次,计算出投影后的几何图形以及裁剪窗口之间的交点;最后,将裁剪窗口内的部分保留,而把窗口外的部分抛弃掉。

3D裁剪算法的基本步骤如下:首先,将要裁剪的几何图
形投影到三维空间;其次,计算出投影后的几何图形以及裁剪窗口之间的交点;最后,将裁剪窗口内的部分保留,而把窗口外的部分抛弃掉。

计算机图形学的裁剪算法在图形处理中有着重要的作用,它不仅能够有效减少图形处理时间,而且还可以节约存储空间。

此外,它还可以有效提高图形处理效率,提高图形显示效果。

但是,它也存在着一定的局限性,比如,当几何图形的运动变得复杂时,它就会变得费时费力,这就对性能产生了一定的影响。

总之,计算机图形学的裁剪算法是图形学的重要算法,它的应用非常广泛,在图形处理中有着重要的作用。

虽然它也存在着一定的局限性,但是它仍然是一种有效的图形处理算法。

计算机图形学裁剪

计算机图形学裁剪
段位于窗口的同一侧,为不可见; 算出直线与窗口的交点,将直线分割,舍去交
点之外的一段,再对另一段重复上述处理。
例题
(1)Code1=0001 Code2=1000 ,该 线段既非完全可见,也非完全不可见;
(2)与窗口左边求交点P3,舍去P1P3 (3)余下的P2P3不能简单判定,与窗
口右边求交点P4,
边和裁减窗口边之间的关系
(1) SP与窗口边 界的交点I与P均 被加入到输出顶 点表中
(2) P加入到输 出顶点表中
(3) SP与窗口边 界的交点I被加 入到输出顶点表 中
(4) 输出顶点表 中不增加任何顶 点
例题
退化情况
结论
凸多边形用此算法可以获得正确的裁剪结果, 而且可以推广到任意凸多边形窗口的情况。
(2)小窗口的场合,其中大部分线段为完全不 可见
但是求交计算较复杂
实验
利用Cohen-Sutherland算法实现直线的 裁剪
要求:裁剪窗口为矩形,可以对任意位 置直线进行裁剪。
中点分割法
中点分割算法的核心思想是通过 二分逼近来确定直线段与窗口的 交点。
是Sproul 和Sutherland为了便于 硬件实现而提出的。
舍去P5P4; (5)P3P4为完全可见线段。
舍去的这一段,应该是窗口外一端点到 交点之间这一段
如何减少求交次数?
验证两端点各位编码值,相异则求交。
该算法的特点
该算法用编码的方法实现了对完全可见 和不可见直线段的快速接受和拒绝,这 使得它在两类裁剪场合中非常高效:
(1)大窗口的场合,其中大部分线段为完全可 见;
第四章 二维图形裁剪
裁剪技术
所谓裁剪技术,就是按预先设置的窗口 参数,沿窗口边框线对图形进行裁剪, 保留窗口内部图形,裁剪掉窗口外图形 的方法。

计算机图形学-二维图形变换与裁剪ppt课件

计算机图形学-二维图形变换与裁剪ppt课件
计算机图形学二维图形变换与 裁剪
图形变换
2
观察与思考
零件三视图
3
观察与思考
三视图投影示意图
4
图形变换
从不同角度观察物体,会看到不同的形状 形状的变化可以通过图形变换来实现 图形变换是计算机图形学的基础内容之一 通过图形变换 可由简单图形生成复杂图形 可用二维图形表示三维形体 可对静态图形经过快速变换而获得图形的动 态显示效果
13
数学基础(4)
矩阵的乘法
a b 11 a 12 a 13 11 b 12 b 13 A B a a a b b b 21 22 23 21 22 23 a b 31 a 32 a 33 31 b 32 b 33
矩阵的数乘
a ka 11 a 12 a 13 11 ka 12 ka 13 k a a a ka ka ka 21 22 23 21 22 23 a ka 31 a 32 a 33 31 ka 32 ka 33
y1 y2 yn
z1 z2 zn
10
数学基础 1
设有两个矢量
u x U u y u z
vx V v y vz
矢量和
u x vx U V u v y y u z vz
a b a b a b a b a b a b a b a b a b 11 11 12 21 13 31 11 12 12 22 13 32 11 13 12 23 13 33 a b a b a b a b a b a b a b a b a b 21 1122 2123 3121 1222 2223 3221 1322 2323 33 a b a b a b a b a b a b a b a b a b 31 11 32 21 33 31 31 12 32 22 33 32 31 13 32 23 33 33

计算机图形学 第6章 二维裁剪PPT课件

计算机图形学 第6章 二维裁剪PPT课件

若(x1,y1)在5区,且ys>yt ,则线段与窗口无交点,无 输出线段,过程就此结束。
若(x1,y1) 在3区.且ys<yb ,则线段与窗口无交点,无 输出线段,过程就此结束。
28.11.2020
华东交大信息学院软件教研室
11
A
A
A A
28.11.2020
华东交大信息学院软件教研室
12
若ys<yb (在5区),则:
如果线段不能通过上述两种测试判
断为保留或舍弃,则必须求出线段与窗 1001 1000 1010
口边界线的交点,即分割线段,舍弃在
窗口外同侧的部分线段,对留下的线段
窗口
重复进行上述对留下的线段重复进行上 0001 0000 0010
述两种情况的判断,直到留下的线段符
合上述两种情况之一为止。
0101 0100 0110
28.11.2020
华东交大信息学院软件教研室
8
我们以图的线段AB为例来说明,该裁剪算法的步骤 如下:
①排斥性测试。 若线段满足下述的四个条件之一,即:
– max(x1, x2)≤xL; – min(x1, x2)≥xr; – max(y1, y2)≤yb; – min(yl, y2) ≥yt;
则线段必定完全位于窗口之外,无输出线段,过程就 此结束。
第6章 裁剪
6.1 直线段的裁减算法 6.2 多边形裁剪 6.3 字符裁剪
28.11.2020
华东交大信息学院软件教研室
1
6.1 直线段的裁减算法
二维裁剪及裁剪处理工作:
• 窗口内外的判断;

计算图形元素与窗口边界的交点; 判断图形元素在窗口内外的原则:

计算机图形学 实验四 二维图形的裁剪

计算机图形学 实验四 二维图形的裁剪

西北农林科技大学实习报告学院名称:理学院专业班级:姓名:学号:课程:计算机图形学实验报告日期:第十五周实验四二维图形的裁剪一、实验目的1)加深直线段的剪裁算法的理解。

2)熟练掌握一种裁剪算法的编程方法。

二、实验步骤1)分析直线段和矩形窗口的位置关系,选定比较合理算法流程。

2)画出程序流程图。

3)编写程序的源程序。

4)编辑源程序并进行调试。

5)进行特殊模式的运行测试,并结合情况进行调整。

三、实验内容1)在编码算法、中点分割算法、Liang-Barsky算法三种中任选一种作为编程模型。

2)编写直线段裁剪的源程序。

3)建议有能力的学生编写多边形裁剪程序。

4)在计算机上编辑编译运行,实现直线段的裁剪。

原理1.直线和窗口的关系:直线和窗口的关系可以分为如下3类:(1)整条直线在窗口内。

此时,不需剪裁,显示整条直线。

(2)整条直线在窗口外,此时,不需剪裁,不显示整条直线。

(3)部分直线在窗口内,部分直线在窗口外。

此时,需要求出直线与窗框的交点,并将窗口外的直线部分剪裁掉,显示窗口内的直线部分。

直线剪裁算法有两个主要步骤。

首先将不需剪裁的直线挑出,即删去在窗外的直线。

然后,对其余直线,逐条与窗框求交点,并将窗口外的部分删去。

2.Cohen-Sutherland直线剪裁算法:(1)输入直线段的两端点坐标p1(x1,y1),p2(x2,y2),以及窗口的4条边界坐标,y wt ,y wb,y wl,y wr.(2)对p1,p2进行编码,点p1的编码为code1,点p2的编码为code2.(3)若code1| code2=0,对直线p1p2“简取”之,转(6);否则,若code1& code2≠0,对直线段“简弃”之,转(7);当上述两条均不满足时,进行步骤(4)。

(4)确保p1在窗口外部。

若p1在窗口内,则交换p1和p2的坐标值和编码。

(5)根据p1编码从低位开始寻找值为1的地方,从而确定p1在窗口外的哪一侧,然后求出直线段与相应窗口边界的交点S,并用交点S的坐标值替换p1的坐标值,即在交点S处把线段一分为二,因此可以去掉p1S。

计算机图形学第6章开窗口和二维裁剪

计算机图形学第6章开窗口和二维裁剪
点分割算法
从P0出发找距离P0最近可见点采用中点分割方法 先求出P0P1的中点Pm, 若P0Pm不是显然不可见的,并且P0P1在窗口中有可见部分,则距P0最近的可见点一定落在P0Pm上,所以用P0Pm代替P0P1; 否则取PmP1代替P0P1。 再对新的P0P1求中点Pm。重复上述过程,直到PmP1长度小于给定的控制常数为止,此时Pm收敛于交点。 从P1出发找距离P1最近可见点采用上面类似方法。
待裁剪线段:
假定条件
图元关于窗口内外关系的判别
判断图形元素是否落在裁剪窗口之内并找出其位于内部的部分
矩形裁剪窗口:[xmin,xmax]X[ymin,ymax]
图元与窗口的求交
裁剪的处理的基础
裁剪的目的
直线裁剪的基本原理
01
直线裁剪的基本原理
点裁剪 点(x, y)在窗口内的充分必要条件是:
02
Sutherland-Hodgman算法
裁剪窗口为任意多边形(凸、凹、带内环)的情况:
Weiler-Atherton算法
主多边形:被裁剪多边形,记为A 裁剪多边形:裁剪窗口,记为B
Weiler-Atherton算法
多边形顶点的排列顺序(使多边形区域位于有向边的左侧 )外环:逆时针 ;内环:顺时针 主多边形和裁剪多边形把二维平面分成两部分。 内裁剪:A∩B 外裁剪:A-B
第6章 开窗口及二维裁剪
应用程序中所定义的画面均以世界坐标系表示,这些画面要映射到设备坐标系才可以显示出来。在显示器上可以只选择一个显示区域观察一幅画面,也可以同时选择若干显示区域观察若干幅画面。把用一观察窗口有选择地显示物体地某一部分称为开窗口技术,如果要求删除显示区域之外的画面部分则称为裁剪。
第6章 开窗口及二维裁剪
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
所示,对于其中任一边界向量,从向量起点A向终点B看过去: 如果被测试点P在该边界线右边(即内侧),AB×AP的方向与X-Y平面
垂直并指向屏幕里面,即右手坐标系中Z轴的负方向。 反过来,如果P在该边界线的左边(即外侧),这时AB×AP的方向与X-
Y平面垂直并指向屏幕外面,即右手坐标系中Z轴的正方向。 设:点P(x,y)、点A(xA,yA)、点B(xB,yB), 向量AB={(xB-xA),(yB-yA)}, 向量AP={(x-xA),(y-yA)}, 那么AB×AP的方向可由下式的符号来确定:
依次下去,相对于第三条、第四条边界线进行裁剪,最后输出的多边 形顶点序列即为所求的裁剪好了的多边形。如下图所示。
7.3.1 Sutherland-Hodgeman多边形裁剪
新的多边形顶点序列产生规则: 在用窗口一条边界及其延长线裁剪一个多边形时,该边界线把平面分
成两个部分:一部分称为边界内侧;另一部分称为边界外侧。 如下图所示,依序考虑多边形的各条边。假设当前处理的多边形的边为
V=(xB-xA)·(y-yA)-(x-xA)·(yB-yA)
(3-14)
因此,当V≤0时,P在边界线内侧; 而V>0时,P在边界线外侧。
练习
Sutherland-Hodgeman多边形裁剪中,常用向量叉积法来测试当前点P是 否在边界内侧。已知窗口边界A(30,100)、B(40,180),某点P(50, 300),请 问点P在边界内侧吗?
7.3 多边形的裁剪
多边形裁剪的常用算法 1.Sutherland-Hodgeman多边形裁剪 2.Weiler-Atherton任意多边形裁剪
7.3.1 Sutherland-Hodgeman多边形裁剪
Sutherland-Hodgman算法也叫逐边裁剪法,该算法是萨瑟兰德 (I.E.Sutherland)和霍德曼(Hodgman)在1974年提出的。这种算法采用了 分割处理、逐边裁剪的方法。 一、Sutherland-Hodgeman多边形裁剪算法思想:
主多边形A和裁剪多边形B的边界将整个二维平面分成了四 个区域:
1、A∩B(交:属于A且属于B); 2、A-B(差:属于A不属于B); 3、B-A(差:属于B不属于A); 4、A∪B(并:属于A或属于B,取反;即:不属于A且 不属于B)。 内裁剪即通常意义上的裁剪,取图元位于窗口之内的 部分,结果为A∩B。 外裁剪取图元位于窗口之外的部分,结果为A-B。 观察右图不难发现裁剪结果区域的边界由被裁剪多边形的 部分边界和裁剪窗口的部分边界两部分构成,并且在交点 处边界发生交替,即由被裁剪多边形的边界转至裁剪窗口 的边界,或者反之。由于多边形构成一个封闭的区域,所 以,如果被裁剪多边形和裁剪窗口有交点,则交点成对出 现。这些交点分成两类: 一类称“入”点,即被裁剪多边形由此点进入裁剪窗口, 如图中a、c、e; 一类称“出”点,即被裁剪多边形由此点离开裁剪窗口, 如图中b、d、f。
每次用窗口的一条边界(包括延长线)对要裁剪的多边形进行裁剪,裁剪 时,顺序地测试多边形各顶点,保留边界内侧的顶点,删除外侧的顶点, 同时,适时地插入新的顶点:即交点和窗口顶点,从而得到一个新的多边 形顶点序列。
然后以此新的顶点序列作为输入,相对第二条窗边界线进行裁剪,又 得到一个更新的多边形顶点序列。
7.3.1 Sutherland-Hodgeman多边形裁剪 二、Sutherland-Hodgeman多边形裁剪算法实现:
7.3.1 Sutherland-Hodgeman多边形裁剪
三、Sutherland-Hodgeman多边形裁剪算法演示: 四、点在边界内侧的判断方法:
为了判断pi点是否在边界内侧可用坐标比较法和更通用的向量叉积符号 判别法。
计算 V = (xB-xA)·(y-yA)-(x-xA))·(yB-yA) =(40-30)·(300-100)-(50-30))·(180-100) =400
因为V > 0时,所以P在边界外侧。
作业 Sutherland-Hodgeman多边形裁剪中,常用向量叉积法来测试当前点P是 否在边界内侧。已知窗口边界A(50,80)、B(75,130),某点P(60, 150),请问 点P在边界内侧吗?
7.3.2 Weiler-Atherton任意多边形裁剪 Sutherland-Hodgeman算法解决了裁剪窗口为凸多边形窗口的问题,但 一些应用需要涉及任意多边形窗口(含凹多边形窗口)的裁剪。WeilerAtherton多边形裁剪算法正是满足这种要求的算法。 一、Weiler-Atherton任意多边形裁剪算法描述:
1、坐标比较法 将点的某个方向分量与边界进行比较。 例如,判断某点是否在下边界内侧,用条件判别式: if(p[i][1]>=ymin) 即 可。 对其它边界也一样。但不能写成通用公式。
7.3.1 Sutherland-Hodgeman多边形裁剪
2、向量叉积法 为简单计,测试点表示为P点。假设窗口边界方向为顺时针,如图中
在算法中,裁剪窗口、被裁剪多边形可以是任意多边形:凸的、凹的 (内角大于180o)、甚至是带有内环的(子区),见下图。
裁剪窗口和被裁剪多边形处于完全对等的地位,这里我们称: 1、被裁剪多边形为主多边形,记为A; 2、裁剪窗口为裁剪多边形,记为B。
7.3.2 Weiler-Atherton任意多边形裁剪
7.3.1 Sutherland-Hodgeman多边形形裁剪算法特点: Sutherland-Hodgeman多边形裁剪算法具有一般性,被裁剪多边形可
以是任意凸多边形或凹多边形,裁剪窗口不局限于矩形,可以是任意凸多边 形。
上面的算法是多边形相对窗口的一条边界进行裁剪的实现,对于窗口的 每一条边界依次调用该算法程序,并将前一次裁剪的结果多边形作为下一次 裁剪时的被裁剪多边形,即可得到完整的多边形裁剪程序。
SP(箭头表示顺序关系,S为前一点,P为当前点),边SP与裁剪线的位置关 系只有下面四种情况:
1、S在外侧,P在内侧。则交点Q、当前点P保存到新多边形中。 2、S、P均在内侧,则当前点P保存到新多边形中。 3、S在内侧,P在外侧。则交点Q保存到新多边形中。 4、S、P均在外侧。则没有点被保存到新多边形中。
相关文档
最新文档