资源描述:
《实验三图形裁剪算法实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验三图形裁剪算法实现实验学时:2学时实验类型:验证型实验要求:必修在使用计算机处理图形信息吋,计算机内部存储的图形往往比较大,而屏幕显示的只是阁的一部分。因此需要确定阁形中哪些部分落在显示区之(Al,哪些落在显示区之外,以使只显示落在显示区内的那部分图形。这个选择过程称为裁剪。最简单的裁剪方法是把各种图形扫描转换为点之盾,再判断各点是否在窗内。但那样太费时,一般不可取。这是因为冇些阁形绀成部分全部在窗UI外,可以完全排除,不必进行扫描转换。所以一般采川先裁剪再扫描转换的方法,多边形裁剪示意图,如图1-1所示。(a)裁剪前(b)裁剪后图1-1多边形裁剪示意图直线裁剪1.直线和窗口的
2、关系直线和窗U的关系如图1-2所示,可以分为如卜*3类:(1)整条直线在窗口内。此时,不需剪裁,显示整条直线。(2)整条且线在窗口外,此时,不需剪裁,不显示整条K线。(3)部分直线在窗口内,部分直线在窗U外。此吋,需耍求出直线与窗框的交点,并将窗口外的直线部分剪裁棹,显示窗口内的直线部分。直线剪裁算法冇两个主要步骤。首先将不需剪裁的且线挑出,即删去在窗外的直线。然后,对其余宜线,逐条与窗框求交点,并将窗口外的部分删去。2.Cohen-Sutherland直线剪裁算法以区域编码为基础,将窗口及其周围的8个方向以4bit的二进制数进行编码。如图1-3所示的编码方法将窗UI及其邻域分为5
3、个区域。(1)内域:区域(0000)。(2)上域:区域(1001,1000,1010)。(3)下域:区域(0101,0100,0110)。(4)左域:区域(1001,0001,0101)。100110001010000100000010010101000110P,图1-3WlI及M邻域的5个区域及与肖线的关系(5)心域:区域(1010,0010,0110)。当线段的两个端点的编码的逻辑“与”非零时,线段妯然为不可见的。对某线段的两各端点的区号进行位与运算,可知这两个端点是否同在视区的上、下、左、右。算法的主要思想是,对每条直线,如P,P2利用以下步骤进行判断:①对直线两端点编码分别
4、记为C,(P,)={6/,,Z?hChJ,},C2(P2)={6Z2,b2,c2,么}其中,at、bi、d、式取值范围为{l,0},/e{l,2}o②如果则显示整条直线,取出下一条直线,返回步骤①;否则,进入步骤③。③如果
5、1=1,则求直线与窗上边的交点,并删去交点以上部分。如果
6、Z?2I=1»ICi—C*2
7、=1,丨d—d2
8、=1>进什类似处理。④返回步骤①判断K一条直线。多边形裁剪多边形裁剪算法的关键在于,通过剪裁,要保持窗uA多边形的边界部分,而且要将窗框的冇关部分按一定次序插入多边形的保贸边界之间,从而使剪裁后的多边形的边仍然保持封闭状态,以便填色算法得以正确实现,多边形
9、裁剪原理示意阁,如阁1-4所示。(b)按直线剪裁的多边形图1-4多边形裁剪原理示意图I(c)按多边形剪裁后的多边形(1)Sutherland-Hodgman算法思路:将多边形的各边先相对于窗U的某一条边界进行裁剪,然后将裁剪结果再与另一条边界进行裁剪,如此重复多次,便可得到最终结果。(2)实现方法:①设置两个表。输入顶点表(向量)——用于存放被裁剪多边形的顶点输出顶点表(线性链表)——用于存放裁剪过程中叫结果的顶点②输入顶点表中各顶点要求按一定顺序排列,一般可采用顺时针或逆时针方向。③相对于裁剪窗口的各条边界,按顶点表中的顺序,逐边进行裁剪。(3)具体操作步骤如下:①P,•若位于边
10、界线的可见一侧,则P,•送给输出顶点表。②P,•若位于边界线的不对见一侧,则将其舍弃。③除第一个顶点外,还要检查每一个P,•和前一•顶点Py是否位于窗口边界的同一•侧,若不在同一侧,则需计算出交点送给输出顶点表。④最后一个顶点则还要与A—起进行同样的检杏。如下阁1-6所示,是上述多边形裁剪的原理示意阁。图1-6多边形裁剪原现示意图2似q3Q图形裁剪编程1.程序设计功能说明如图1-7所示为图形裁剪的实用程序运行时的主界Iftf,首先根裾界側提示,在用户区双击,出现所需要裁剪的各种线段,再单击菜单中“阁形裁剪”,可选择其下拉菜单的各阁形裁剪选项完成各种图形裁剪(在窗U中红矩形框外的线
11、段或多边形被裁减掉)。图1-7“图形裁剪”程序主界面1.程序设计步骤程序“阁形裁剪”的设计步骤如不:(1)创建工程名称为“图形裁剪”单文档应用程序框梁(参看上面单文档应用程序框架的建立)。(2)编辑菜单资源。图1-8图形裁剪切界面设计如图1-8所示的菜雄项。在工作区的ResourceView标签屮,单击Menu项左边“+”,然后双击其子项IDR.MAINFRAME,并根裾表1-9中的定义编辑菜单资源。表1-9菜单资源表菜单标题菜单项标题标示符ID图形裁剪线段裁剪ID.