- 1、本文档共58页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多边形的扫描转换与区域填充;一、多边形的扫描转换; 顶点表示是用多边形的顶点序列来表示多边形。这种表示直观、几何意义强、占内存少,易于进行几何变换,但由于它没有明确指出哪些象素在多边形内,故不能直接用于面着色。; 众所周知,在计算机上画图形,实际上就是写帧缓存(frame buffer)。如果知道多边形哪些像素在里面,就直接写到帧缓存里即可。; 多边形分为凸多边形、凹多边形、含内环的多边形等:; 有关概念;逐点判断填充算法;取矩形R(x1≤x≤x2,y1≤y≤y2),使R包围D,
则逐点判断填充算法如下:
for(y=y1;y=y2;y++)
for(x=x1;x=x2;x++)
if(inside(D,x,y))
drawpixel(x,y,color);
上述算法原理简单、实用,但效率低;
效率低的原因是没有考虑各象素之间的联系,孤立地考察象素与区域的关系,使得几十万甚至几百万个象素都要一一判别,每次判别又要多次求交点,需要做大量的乘除运算,花费很多时间。
;1)射线法;
2)累计角度法;
3)编码法;
4)……..
;1)射线法;;逐点判断法; 现在的问题是,知道多边形的边界,如何找到多边形内部的点,即把多边形内部填上颜色。 ; X-扫描线算法填充多边形的基本思想是按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的像素,即完成填充工作。; 对于每条穿越多边形的扫描线,X-扫描线算法确定扫描线与多边形边相交区间的像素点位置。; 从该例可以看出,算法的核心是需按x递增顺序排列交点的x坐标序列。由此,可得到X-扫描线算法步骤如下:;c、交点配对:第一个与第二个,第三个与第四个 等等,每对交点就代表扫描线与多边形的一个相交区间;;x;具体实现方式是:; 但这个算法效率比较低,因为这个算法的关键问题是求交!而求交是很可怕的,求交的计算量是非常大的。; 扫描转换算法重要意义是提出了图形学里两个重要的思想:第一个思想是扫描线的思想,当处理图形图像时按一条条扫描线处理;第二个思想是增量的思想。;可以从三方面考虑加以改进:;数据结构:; 即△x=1/k为常量。则下一条扫描线与该边的交点不要重新计算,只要加一个增量△x。;一个多边形与若干扫描线; 为了方便有效边表的建立与更新,需构造一个新边表(NET),用来存放多边形的边的信息,分为4个步骤:;一个多边形与若干扫描线; 从上面这个指针数组里面就知道多边形是从哪里开始的。在这个指针数组里只有1、2、3、5处有边,因此当从下往上进行扫描转换的时候,从y=1开始做,而在1这条线上有两条边进来了,然后就把这两条边放进活性边表来处理。; 即每做一次新的扫描线时,要对已有的边进行三个处理:一是否被去除掉;如果不被去除,第二就要对它的数据进行更新,。所谓更新数据就是要更新它的x值,即x+△x;最后,就是有没有新的边进来,新的边在NET里,可以插入排序插进来。;void polyfill (polygon, color)
int color; 多边形 polygon;
{ for (各条扫描线i )
{ 初始化新边表头指针NET[i];
把ymin = i 的边放进边表NET[i];
}
y = 最低扫描线号;
初始化活性边表AET为空;
for (各条扫描线i )
{
把新边表NET[i] 中的边结点用插入排序法插入AET表,
使之按x坐标递增顺序排列;
遍历AET表,把配对交点区间(左闭右开)上的象素(x,y)
,用putpixel(x,y,color) 改写象素颜色值;
遍历AET表,把ymax= i 的结点从AET表中删除,并把ymaxi
结点的x值递增?x;
若允许多边形的边自相交,则用冒泡排序法对AET表重新排序;
}
} /* polyfill */;3、边缘填充算法;逐边向右取;;边缘填充算法缺点:每一个象素可能被访问多次
引入栅栏,以减少填充算法访问象素的次数。
栅栏:与扫描线垂直的直线,通常过一顶点,且把多边形分为左右二半。
基本思想:扫描线与多边形的边求交,将交点与栅栏之间的象素取补。若交点位于栅栏左边,则将交点之右,栅栏之左的所有象素取补;若交点位于栅栏右边,则将交点之左,栅栏之右的所有象素取补。
减少了象素重复访问数目,但不彻底。;6、边界标志算法;void edgemark_fill(polydef
您可能关注的文档
最近下载
- 农庄小能手(积肥)(教学设计)-四年级下册劳动教育“小农庄”(校本课程).docx VIP
- 世界上最棒的礼物幼儿园儿童故事绘本PPT课件.pptx VIP
- 幼儿园故事《世界上最棒的礼物》绘本故事PPT课件.pptx VIP
- 幼儿园故事《世界上最棒的礼物》绘本故事PPT课件.pptx VIP
- 中国石化品牌管理手册解读(适用业务简单的单位).pptx
- 世界上最棒的礼物幼儿园儿童故事绘本PPT课件.pptx VIP
- 酒店管理物业 物业消防设施月度维保检查记录表——集团连锁酒店管理公司(叶予舜).docx VIP
- 室内分布通信系统工程施工组织设计方案.docx
- 北师大版2024年数学七年级下册期末模拟培优卷(含答案).docx VIP
- 铁路防洪重大风险分析与管控措施.pdf VIP
文档评论(0)