Weiler-Atherton任意多边形裁剪算法
- 格式:doc
- 大小:59.50 KB
- 文档页数:5
计算机科学技术:计算机图形学题库三1、名词解释扫描转换答案:在矢量图形中,多边形用顶点序列来表示,为了在光栅显示器或打印机等设备上显示多边形,必须把它转换为点阵表示。
这种转换称为扫描转换。
2、单选下面对光栅扫描图形显示器描述正确的是()A.荧光粉涂层均匀离散分布;B.是一种点画设备;C.电子束从顶到底扫描;D.通过控制电子束的强弱实现色彩的强弱;答案:A3、填空题计算机图形系统由()系统和软件系统组成。
答案:硬件4、填空题在处理图形时常常涉及的坐标系有模型坐标系(),世界坐标系,观察坐标系,设备坐标系。
答案:局部坐标系5、单选计算机图形学与计算机图象学的关系是()。
A.计算机图形学是基础,计算机图象学是其发展B.不同的学科,研究对象和数学基础都不同,但它们之间也有可转换部分C.同一学科在不同场合的不同称呼而已D.完全不同的学科,两者毫不相干答案:B6、问答题简述中点分割法进行裁剪的过程?答案:中点分割剪取法,主要是对线段不断地进行对分,并排除在区域外的部分,找出线段落在窗口内的部分。
其方法主要是通过求出离线段的一个端点最近并且在区域内的点的方法,来确定线段落在窗口内的端点。
7、问答题局部光照模型和全局光照模型的不同之处是什么?答案:局部光照模型主要是考虑光源发出的光对物体的直接影响。
另外,全局光照模型除了处理光源发出的光之外,还考虑其他辅助光的影响,如光线穿过透明或半透明物体,以及光线从一个物体表面反射到另一个表面等。
8、判断题彩色阴极射线管主要是由红绿蓝三个彩色电子束的亮度不同,进而组合形成各种色彩的。
答案:错9、问答题什么叫做走样?什么叫做反走样?反走样技术包括那些?答案:走样指的是用离散量表示连续量引起的失真。
为了提高图形的显示质量。
需要减少或消除因走样带来的阶梯形或闪烁效果,用于减少或消除这种效果的方法称为反走样。
其方法是①前滤波,以较高的分辨率显示对象;②后滤波,即加权区域取样,在高于显示分辨率的较高分辨率下用点取样方法计算,然后对几个像素的属性进行平均得到较低分辨率下的像素属性。
一、单项选择题(共15小题,每小题1分,共15分)。
1.下面哪个不是国际标准化组织(ISO)批准的图形标准。
()A.GKSB.PHIGSC.CGMD.DXF2.在CRT显示器系统中,()是控制电子束在屏幕上的运动轨迹。
A. 阴极B. 加速系统C. 聚焦系统D. 偏转系统3.触摸屏是一种()A. 输入设备;B. 输出设备;C. 既是输入设备,又是输出设备;D. 两者都不是;4.分辨率为1024*1024的显示器,其位平面数为24,则帧缓存的字节数应为()A. 3MB;B. 2MB;C. 1MB;D. 512KB;5.计算机显示设备一般使用的颜色模型是()A. RGBB. HSVC. CMYD. 上述都不是6.数字化仪是一种()坐标定位设备。
A. 绝对B. 笛卡儿C. 相对D. 球7.直线DDA算法中,已知起点P1(x1,y1)和终点P2(x2,y2),当x1>x2时,△x的符号是()A. 正B. 负C. 无符号D. 递增8.X-扫描线算法涉及到哪些主要的操作步骤不包括()A. 求交;B. 排序;C. 建立多边形表;D. 区间添色;9.中点分割法求交点的规则,当线段P1P2求出中点P后,如果P1与P不同侧,移动P2点,P1与P不同侧的表达式为:()。
A. (C1&& C)!=0B. (C1& C)!=0C. (C1&& C)= =0D. (C1& C)= =010.以下关于图形变换的论述不正确的是()A. 平移变换不改变图形大小和形状,只改变图形位置;B. 拓扑关系不变的几何变换不改变图形的连接关系和平行关系;C. 旋转变换后各图形部分间的线性关系和角度关系不变,变换后直线的长度不变D. 复合变换可以使用一系列连续的简单变换代替,其矩阵为简单变换矩阵连乘;11.齐次坐标系就是n维空间中物体可用()齐次坐标来表示。
A. n维B. n+1维C. n-1维D. n+2维12.在透视投影中,主灭点的最多个数是()A. 1B. 2C. 3D. 413.在三维几何造型方法中,局部操作能力比较弱的方法是()A. 体素造型B. 八叉树造型C. B-rey造型D. 特征造型14.在多边形面片数量很大时,消隐算法最快的应该是()A. Z-BufferB. 扫描线C. 画家算法D. 不确定15.在明暗的光滑处理方法中,下列论述哪个是错误的?()A. Gouraud 明暗模型计算中,多边形与扫描平面相交区段上每一采样点的光亮度值是由扫描平面与多边形边界交点的光亮度插值得到的B. Phong通过对多边形顶点的法矢量进行插值,获得其内部各点的法矢量C. Gouraud 计算工作量比Phong方法计算工作量大D. Gouraud明暗模型处理的缺点是它使高光部位变得模糊二、填空题(共15小题,每小题1分,共15分)。
weiler-atherton多边形裁剪算法weileratherton多边形裁剪算法,又称为weiler-atherton算法,是一种用于对多边形进行裁剪的算法。
它可以被用于计算机图形学中的裁剪任务,如可视化、图像处理和计算机辅助设计等领域。
本文将详细介绍weileratherton多边形裁剪算法的原理、步骤和实现方法。
1. 算法原理:weileratherton多边形裁剪算法是基于边界点的引入和处理的。
该算法将两个多边形相互之间进行裁剪,并生成裁剪结果。
算法使用四个边界点集合,分别为输入多边形的边界点集合(输入多边形顶点经过一系列处理得到),裁剪多边形的外部边界点集合和内部边界点集合,以及裁剪结果的边界点集合。
2. 算法步骤:weileratherton多边形裁剪算法的具体步骤如下:(1) 初始化:创建输入多边形的边界点集合、裁剪多边形的外部边界点集合和内部边界点集合,并将输入多边形的边界点添加至外部边界点集合中。
(2) 遍历输入多边形的每条边:对于输入多边形的每条边,判断其与裁剪多边形的相交情况。
(3) 相交情况处理:若相交情况为内部相交或外部相交,则根据交点生成新的内部边界点,并添加至相应的边界点集合中。
(4) 构造裁剪结果:根据输入多边形的边界点集合和裁剪多边形的内部边界点集合,生成裁剪结果的边界点集合。
(5) 根据边界点集合构造裁剪结果:根据裁剪结果的边界点集合,绘制裁剪结果多边形。
3. 算法实现:weileratherton多边形裁剪算法的实现可以使用编程语言来完成。
一种常用的实现方法是通过遍历输入多边形的每个边,利用线段与裁剪多边形的边界的相交情况判断是否产生交点,并根据交点生成新的边界点。
具体的实现步骤如下:(1) 初始化输入和裁剪多边形的边界点集合。
(2) 遍历输入多边形的每条边,对于每条边,判断其与裁剪多边形的每条边的相交情况。
(3) 根据相交情况,判断是否生成交点,如果有生成交点,则根据交点生成新的边界点,并添加至相应的边界点集合中。
具有拓扑关系的任意多边形裁剪算法拓扑关系是指在空间中,几何对象之间的相对位置和连接关系。
任意多边形裁剪算法是指对于两个多边形A和B,确定A相对于B的位置关系,并将A裁剪成相对于B的部分。
常用的具有拓扑关系的任意多边形裁剪算法有Sutherland-Hodgman算法和Weiler-Atherton算法。
Sutherland-Hodgman算法是一种简单而直观的裁剪算法,它以多边形A为基础,对多边形A的每条边进行裁剪,最终得到所需的裁剪结果。
算法步骤如下:1.对于裁剪窗口的每条边界,确定其相对于多边形A的左侧。
2.对多边形A的每条边进行裁剪处理,生成新的顶点序列。
3.重复步骤2,直到对所有的边界完成处理。
4.返回裁剪结果。
其中,对于多边形A的每条边进行裁剪处理的具体步骤如下:1.对于多边形A的每条边,判断边的起点和终点是否在裁剪窗口内。
2.如果起点和终点都在窗口内,则将边加入新的顶点序列。
3.如果起点在窗口内,而终点在窗口外,则计算边与窗口边界的交点,并将交点加入新的顶点序列。
4.如果起点在窗口外,而终点在窗口内,则计算边与窗口边界的交点,并将交点作为起点加入新的顶点序列。
5.如果起点和终点都在窗口外,则忽略这条边。
Sutherland-Hodgman算法的优点在于简单易懂,对于凸多边形和凹多边形都适用,但由于其每条边都需要进行裁剪处理,效率较低。
Weiler-Atherton算法是一种基于点集的裁剪算法,它将两个多边形视为点的集合,并通过点集之间的拓扑关系进行裁剪操作。
算法步骤如下:1.对于多边形A和多边形B,找到它们的交点。
2.根据交点和各自的顺时针或逆时针顺序,将交点按序列分别加入多边形A和多边形B的顶点序列。
3.对多边形A和多边形B的顶点序列进行裁剪处理,得到裁剪结果。
Weiler-Atherton算法的优点在于避免了对每条边进行裁剪的操作,对于复杂多边形的裁剪效果好,但实现较为复杂。
以上是具有拓扑关系的任意多边形裁剪算法的简要介绍。
weiler-atherton多边形裁剪算法-回复什么是Weiler-Atherton多边形裁剪算法?Weiler-Atherton多边形裁剪算法是一种用于计算两个多边形的相交部分的算法。
该算法可以确定两个多边形之间的交集,并生成裁剪后的多边形。
该算法是由Weiler于1977年提出,并由Atherton稍后改进而得名。
它是一种基于点的算法,通过遍历多边形的顶点和边缘来确定它们之间的交集。
Weiler-Atherton多边形裁剪算法非常适用于计算计算机图形学中的裁剪操作,例如裁剪线段、多边形或曲线。
它可以用于裁剪2D和3D场景中的对象,以提高性能并减少渲染的计算量。
下面将为您详细介绍Weiler-Atherton多边形裁剪算法的具体步骤。
步骤1:确定裁剪区域首先,需要定义一个裁剪区域,它是一个多边形,用于裁剪目标多边形。
裁剪区域可以是任何形状,包括凸多边形和凹多边形。
步骤2:确定多边形边缘与裁剪区域的交点接下来,需要遍历目标多边形的所有边缘,并找出它们与裁剪区域的交点。
对于每个边缘,需要检查它是否与裁剪区域相交,并找出相交点的坐标。
步骤3:确定裁剪区域边缘与多边形的交点然后,需要遍历裁剪区域的所有边缘,并找出它们与目标多边形的交点。
同样地,对于每个边缘,需要检查它是否与目标多边形相交,并找出相交点的坐标。
步骤4:确定裁剪多边形的内、外部点在这一步中,需要根据目标多边形和裁剪区域的交点,确定哪些点位于裁剪多边形的内部,哪些点位于外部。
一种常用的方法是使用奇偶规则,根据交点的数量判断点位于多边形内部还是外部。
步骤5:生成裁剪多边形最后,根据确定的内、外部点,生成裁剪后的多边形。
可以通过连接内部点和交点来生成裁剪后的多边形。
需要注意的是,由于Weiler-Atherton多边形裁剪算法是基于点的,因此在处理封闭多边形时需要考虑交点的顺序。
如果交点的顺序不正确,可能会导致生成的裁剪多边形出现错误。
总结Weiler-Atherton多边形裁剪算法是一种用于计算两个多边形相交部分的算法。
160
图5-41 线段与当前裁剪边的位置关系
步骤3:将输出的顶点序列作为下一条裁剪边处理过程的输入,重复步骤2~3,直到所有窗口边线均作为裁剪边处理完毕为止。
步骤4:将输出的新的顶点序列依次连线,可得到裁剪后的多边形。
5.6.2 Weiler-Atherton算法
逐边裁剪法要求裁剪窗口为凸多边形,然而在很多应用环境中,如消除隐藏面时,需要考虑窗口为凹多边形的情况。
逐边裁剪法对凹多边形裁剪时,有时会出现问题,例如,当多边形经裁剪后分裂为几个多边形时,这几个多边形可能会沿着裁剪边框产生多余的线段,如图5-42所示的1~10和8~9的线段。
图5-42 逐边裁剪法对凹多边形裁剪时可能出现的问题
Weiler-Atherton算法可以解决上述问题,虽然该算法略微复杂,但其功能非常强,它不仅允许裁剪窗口和被裁剪窗口都可以是任意的凸的或者凹的多边形,而且还允许它们是有空的多边形。
为算法叙述方便,先作如下约定:
(1)称裁剪窗口为裁剪多边形(Clip Polygon,CP),被裁剪的多边形称为主多边形(Subject Polygon,SP)。
(2)在算法中,主多边形和裁剪多边形均用它们顶点的环形链表表示,多边形的外部边界取顺时针方向,多边形的内部边界取逆时针方向,这一约定可以保证在遍历顶点表时多边形的内部区域始终位于遍历方向的右侧。
《计算机图形学》练习题(答案)《计算机图形学》练习题1.直线扫描转换的Bresenham算法(1) 请写出生成其斜率介于0和1之间的直线的Bresenham算法步骤。
(2) 设一直线段的起点和终点坐标分别为(1,1)和(8,5),请用Bresenham算法生成此直线段,确定所有要绘制象素坐标。
(1)①输入线段的两个端点,并将左端点存储在(x0,y0)中②将(x0,y0)装入帧缓存,画出第一个点③计算常量∆x, ∆y, 2∆y, and 2∆y-2∆x,并得到决策参数的第一个值:p0 = 2∆y - ∆x④从k=0开始,在沿线路径的每个xk处,进行下列检测:如果pk < 0,下一个要绘制的点就是(xk +1,yk) ,并且pk+1 = pk + 2∆y否则下一个要绘制的点就是(xk +1, yk +1),并且 pk+1 = pk + 2∆y- 2∆x⑤重复步骤4,共∆x-1次(2)m=(5-1)/(8-1)=0.57∆x=7 ∆y=4P0=2∆y-∆x=12∆y=8 2∆y-2∆x=-6 k pk (xk+1,yk+1)0 1 (2,2)1 -5 (3,2)2 3 (4,3)3 -3 (5,3)4 5 (6,4)5 -1 (7,4)6 7 (8,5)2.已知一多边形如图1所示,其顶点为V1、V2、V3、V4、V5、V6,边为E1、E2、E3、E4、E5、E6。
用多边形的扫描填充算法对此多边形进行填充时(扫描线从下到上)要建立边分类表(sorted edge table)并不断更新活化边表(active edge list)。
(1)在表1中填写边分类表中每条扫描线上包含的边(标明边号即可);(2)在表2中写出边分类表中每条边结构中各成员变量的初始值(3) 指出位于扫描线y=6,7,8,9和10时活化边表中包含那些边,并写出这些边中的x值、ymax值、和斜率的倒数值1/m。
表1边分y1边 x y max 1/m 4 1 1 97 4 60 05 1 9 76 0 0 61 9 6 6 0 0Y 值(Scan Line Number ) 边(Edge Number ) 1 0 2 0 3 0 4 E1 5 E6,E2 6 E6 7 E3 8 E5,E3 9E4 10 01 2 3 4 5 6 7 8 9 1表 2 边的初7 1 18 7 790 1-18 2 7 9 9 1 -19 3 36 9 991-13. 二维变换(1) 记P(xf,yf)为固定点,sx、sy分别为沿x 轴和y轴方向的缩放系数,请用齐次坐标(Homogeneous Coordinate)表示写出二维固定点缩放变换的变换矩阵。
weiler-atherton多边形裁剪算法-回复标题:深入理解Weiler-Atherton多边形裁剪算法一、引言在计算机图形学中,多边形裁剪是一个常见的操作,用于处理复杂的几何形状。
其中,Weiler-Atherton多边形裁剪算法是一种广泛应用的算法,它能够有效地处理任意两个二维多边形之间的相交、相减和相加操作。
本文将详细解析Weiler-Atherton多边形裁剪算法的步骤和原理。
二、预备知识在深入探讨Weiler-Atherton算法之前,我们需要了解一些基本的预备知识。
1. 多边形表示:多边形通常通过其顶点序列来表示,每个顶点由其在笛卡尔坐标系中的(x, y)坐标确定。
2. 十字产品:在二维空间中,两个向量的十字产品可以用来判断它们的方向关系。
如果结果为正,那么一个向量在另一个向量的逆时针方向;如果结果为负,那么一个向量在另一个向量的顺时针方向;如果结果为零,那么两个向量平行或重合。
三、Weiler-Atherton多边形裁剪算法概述Weiler-Atherton算法主要包括以下四个步骤:1. 分析阶段:确定输入多边形的边缘和顶点的关系。
2. 前处理阶段:生成新的边和顶点,以准备后续的裁剪操作。
3. 裁剪阶段:根据分析阶段的结果,进行实际的裁剪操作。
4. 后处理阶段:清理和优化输出的多边形。
四、详细步骤解析1. 分析阶段:在这个阶段,我们需要对输入的两个多边形A和B的所有边进行遍历,确定每条边与其他边的关系。
具体来说,我们需要找到以下四种情况:- 共线边:两条边平行或重合。
- 相交边:两条边在某个点相交。
- 包含边:一条边完全包含在另一条边上。
- 不相交边:两条边不相交且不共线。
对于每种情况,我们都需要记录下相应的信息,以便在后续阶段使用。
2. 前处理阶段:在这个阶段,我们需要根据分析阶段的结果生成新的边和顶点。
具体来说,我们需要执行以下操作:- 对于每一对相交的边,我们在相交点处生成一个新的顶点,并连接这个新顶点与原来的两个顶点,形成两条新的边。
Weiler-Atherton任意多边形裁剪
Sutherland-Hodgeman算法解决了裁剪窗口为凸多边形窗口的问题,但一些应用需要涉及任意多边形窗口(含凹多边形窗口)的裁剪。
Weiler-Atherton多边形裁剪算法正是满足这种要求的算法。
一、Weiler-Atherton任意多边形裁剪算法描述:
在算法中,裁剪窗口、被裁剪多边形可以是任意多边形:凸的、凹的(内角大于180o)、甚至是带有内环的(子区),见下图。
裁剪窗口和被裁剪多边形处于完全对等的地位,这里我们称:
1、被裁剪多边形为主多边形,记为A;
2、裁剪窗口为裁剪多边形,记为B。
主多边形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。
二、Weiler-Atherton任意多边形裁剪算法思想:
假设被裁剪多边形和裁剪窗口的顶点序列都按顺时针方向排列。
当两个多边形相交时,交点必然成对出现,其中一个是从被裁剪多边形进入裁剪窗口的交点,称为“入点”,另一个是从被裁剪多边形离开裁剪窗口的交点,称为“出点”。
算法从被裁剪多边形的一个入点开始,碰到入点,沿着被裁剪多边形按顺时针方向搜集顶点序列;
而当遇到出点时,则沿着裁剪窗口按顺时针方向搜集顶点序列。
按上述规则,如此交替地沿着两个多边形的边线行进,直到回到起始点。
这时,收集到的全部顶点序列就是裁剪所得的一个多边形。
由于可能存在分裂的多边形,因此算法要考虑:将搜集过的入点的入点记号删去,以免重复跟踪。
将所有的入点搜集完毕后算法结束。
三、Weiler-Atherton任意多边形裁剪算法步骤:
1、顺时针输入被裁剪多边形顶点序列Ⅰ放入数组1中。
2、顺时针输入裁剪窗口顶点序列Ⅱ放入数组2中。
3、求出被裁剪多边形和裁剪窗口相交的所有交点,并给每个交点打上“入”、“出”标记。
然后将交点按顺序插入序列Ⅰ得到新的顶点序列Ⅲ,并放入数组3中;
同样也将交点按顺序插入序列Ⅱ得到新的顶点序列Ⅳ,放入数组4中;
4、初始化输出数组Q,令数组Q为空。
接着从数组3中寻找“入”点。
如果“入”点没找到,程序结束。
5、如果找到“入”点,则将“入”点放入S中暂存。
6、将“入”点录入到输出数组Q中。
并从数组3中将该“入”点的“入”点标记删去。
7、沿数组3顺序取顶点:
如果顶点不是“出点”,则将顶点录入到输出数组Q中,流程转第7步。
否则,流程转第8步。
8、沿数组4顺序取顶点:
如果顶点不是“入点”,则将顶点录入到输出数组Q中,流程转第8步。
否则,流程转第9步。
9、如果顶点不等于起始点S,流程转第6步,继续跟踪数组3。
否则,将数组Q输出;
流程转第4步,寻找可能存在的分裂多边形。
算法在第4步:满足“入”点没找到的条件时,算法结束。
算法的生成过程见下图所示。
四、Weiler-Atherton任意多边形裁剪算法实现:
1、算法在实现中,需要用到六个数组,分别用来存放:被裁剪多边形、裁剪窗口、交点数组、插入交点后的被裁剪多边形、插入交点后的裁剪窗口、输出多边形。
2、由于交点具有“入”、“出”标记,因此凡与交点有关的数组都要采用结构数组类型:
struct point
{
double x;
double y;
int flag;
}交点数组,数组3,数组4;
标记flag有三种状态:
0:非交点;
1:“入”点;
-1:“出”点。
3、求交点时,利用被裁剪多边形的各边去对裁剪窗口的各边求交点:
for(被裁剪多边形的各边)
{
…;
for(裁剪窗口的各边)
{
求有效交点;放入交点数组;
…;
}
}
4、交点的顺序插入,意味着要对交点数组排序后再分别插入到数组1、数组2的相应位置上。
5、所谓找“入”点、“出”点,必须根据flag找寻满足条件的顶点位置。
不光数组3中要找“入”点、“出”点,而且找到后还要转到数组4的相应顶点位置处。
对数组4的处理也同上。
这种处理在本算法中大量遇到。
五、Weiler-Atherton任意多边形裁剪算法演示:(略)
六、Weiler-Atherton任意多边形裁剪算法特点:
1、裁剪窗口可以是矩形、任意凸多边形、任意凹多边形。
2、可实现被裁剪多边形相对裁剪窗口的内裁或外裁,即保留窗口内的图形或保留窗口外的图形,因此在三维消隐中可以用来处理物体表面间的相互遮挡关系。
3、裁剪思想新颖,方法简洁,裁剪一次完成,与裁剪窗口的边数无关。
七、Weiler-Atherton任意多边形裁剪算法小结:
前面介绍的是内裁算法,即保留裁剪窗口内的图形。
而外裁算法(保留裁剪窗口外的图形)同内裁算法差不多。
外裁算法与内裁算法不同的是:
1、从被裁剪多边形的一个“出点”开始,碰到出点,沿着被裁剪多边形按顺时针方向搜集顶点序列;
2、而当遇到“入点”时,则沿着裁剪窗口按逆时针方向搜集顶点序列。
按上述规则,如此交替地沿着两个多边形的边线行进,直到回到起始点为止。
这时,收集到的全部顶点序列就是裁剪所得的一个多边形。
由于可能存在分裂的多边形,因此算法要考虑:将搜集过的“出点”的出点记号删去,以免重复跟踪。
将所有的出点搜集完毕后算法结束。
Weiler-Atherton算法的的设计思想很巧妙,裁剪是一次完成,不象Sutherland-Hodgman 多边形裁剪算法,每次只对裁剪窗口的一条边界及其延长线进行裁剪,如裁剪窗口有n条边,则要调用n次S-H算法后才能最后得出裁剪结果。
但Weiler-Atherton算法的编程实现比Sutherland-Hodgman算法稍难,主要难在入、出点的查寻以及跨数组搜索上。