多边形的填充--扫描线算法(原理)

多边形的填充——扫描线算法(原理)

2007年10月05日 星期五 11:52

多边形在计算机中有两种表示:点阵表示和顶点表示。顶点表示是用多边形的顶点的序列来描述多边形,该表示几何意义强、占内存少,但它不能直观地说明哪些像素在多边形内。点阵表示是用位于多边形内的象素的集合来刻划多边形,该方法虽然没有多边形的几何信息,但具有面着色所需要的图像表示形式。

多边形填充就是把多边形的顶点表示转换为点阵表示,即从多边形的给定边界出发,求出位于其内部的各个像素,并将帧缓冲器内的各个对应元素设置为相应的灰度或颜色。多边形填充最常用的方法就是扫描线算法。下面分两篇文章介绍这种算法的原理和具体实现。

这里所介绍的算法只是针对非自交多边形,这些多边形可以是凸的、凹的或者带有空洞的。

所谓扫描线算法就是找到多边形的最小y 值和最大y 值,然后用这个范围内的每一条水平线与多边形相交,求得交点,再绘制线段。所以我们只需要对一条水平线进行分析就可以。很显然,一条扫描线和多边形有偶数个交点,将这些交点按照x 值从小到大排列,然后取第1、2个绘制,第3、4个绘制...... 直到所有交点都被取完。所以,对于一条扫描线,我们需要做的工作可以分为三个步骤:1) 求出扫描线与多边形边的交点 2)将交点按照x 升序排列 3)将排好序的交点两两配对,然后绘制相应线段。

这三个步骤中,后两个步骤很简单,没有特别的内容需要介绍。但是第一个步骤比较麻烦。这里有几个问题需要解决。

一是当扫描线与顶点相交时,交点的取舍。当与那个顶点关联的边在扫描线同侧时,交点自然算两次,当与那个顶点关联的边在扫描线两侧时,交点只能算一次。我们使用“下闭上开”的办法。

二是多边形边界上的像素取舍,我们采用“左闭右开”的办法。

三是如何减少计算量。在绘制直线时,有一种DDA 算法,它是利用(x,y)直接求出下一个点位于(x+1,y+m)或者(x+1/m, y+1)。在这里可以利用这一点。当已经得到y = e和多边形所有边的交点时,对于下一条扫描线y=e+1,如果没有新边与y=e+1相交,就可以推出y = e+1 和多边形所有边的交点。

四是如何计算第一条扫描线与多边形各个边的交点以及扫描线与新的边相交时的交点。可以把多边形所有边放入一个表中,对于每一条扫描线,就遍历这个表,求得交点。但是很多情况下,一条扫描线仅与少数几条边有交点,如果每次都遍历所有边,效率就会很低。所以我们仅对与该扫描线相交的边进行求交。这些与当前扫描线相交的边我们称之为“活性边”,把它们放入一个“活性边表”AEL中,这样每次遍历AEL 就可以了。AEL 中每一个结点都是一个边,它保存对应边的信息,比如扫描线与该边的交点,该边的两个顶点坐标(未必是四个坐标值,

有可能是其他唯一确定一条边的等价信息) 。

五是如何构造这个AEL 表。上面说AEL 中存放与当前扫描线相交的各个边,但是怎么知道所有边中哪一些和当前扫描线相交呢?显然,当前扫描线位于某条边最小y 值和最大y 值之间时,扫描线和那条边有交点。所以可以这样解决:建立一个边的分类表ET ,将所有边按照其最小y 值分类,放在表中对应位置,然后每一条边又包含有自己的最大y 值,这样就可以知道是不是与扫描线有交点了。对于每一条扫描线,都先判断是否有新的边需要加入到AEL 中,是不是有旧的边需要从AEL 中删除。然后再遍历AEL 求交点。

总结一下,求扫描线算法步骤如下:

建立ET

对于每一条扫描线

如果有新边就向AEL 中插入新边

从AEL 中删除最大y 值小于等于该扫描线的边

遍历AEL 获取交点,并将交点排序

更新AEL 中各个边的x 值,将其作为下一条扫描线与该边的交点

将交点两两配对,绘制线段

对于这一程序的实现,将在下一篇文章中给出。

多边形的填充——扫描线算法(原理)

2007年10月05日 星期五 11:52

多边形在计算机中有两种表示:点阵表示和顶点表示。顶点表示是用多边形的顶点的序列来描述多边形,该表示几何意义强、占内存少,但它不能直观地说明哪些像素在多边形内。点阵表示是用位于多边形内的象素的集合来刻划多边形,该方法虽然没有多边形的几何信息,但具有面着色所需要的图像表示形式。

多边形填充就是把多边形的顶点表示转换为点阵表示,即从多边形的给定边界出发,求出位于其内部的各个像素,并将帧缓冲器内的各个对应元素设置为相应的灰度或颜色。多边形填充最常用的方法就是扫描线算法。下面分两篇文章介绍这种算法的原理和具体实现。

这里所介绍的算法只是针对非自交多边形,这些多边形可以是凸的、凹的或者带有空洞的。

所谓扫描线算法就是找到多边形的最小y 值和最大y 值,然后用这个范围内的每一条水平线与多边形相交,求得交点,再绘制线段。所以我们只需要对一条水平线进行分析就可以。很显然,一条扫描线和多边形有偶数个交点,将这些交点按照x 值从小到大排列,然后取第1、2个绘制,第3、4个绘制...... 直到所有交点都被取完。所以,对于一条扫描线,我们需要做的工作可以分为三个步骤:1) 求出扫描线与多边形边的交点 2)将交点按照x 升序排列 3)将排好序的交点两两配对,然后绘制相应线段。

这三个步骤中,后两个步骤很简单,没有特别的内容需要介绍。但是第一个步骤比较麻烦。这里有几个问题需要解决。

一是当扫描线与顶点相交时,交点的取舍。当与那个顶点关联的边在扫描线同侧时,交点自然算两次,当与那个顶点关联的边在扫描线两侧时,交点只能算一次。我们使用“下闭上开”的办法。

二是多边形边界上的像素取舍,我们采用“左闭右开”的办法。

三是如何减少计算量。在绘制直线时,有一种DDA 算法,它是利用(x,y)直接求出下一个点位于(x+1,y+m)或者(x+1/m, y+1)。在这里可以利用这一点。当已经得到y = e和多边形所有边的交点时,对于下一条扫描线y=e+1,如果没有新边与y=e+1相交,就可以推出y = e+1 和多边形所有边的交点。

四是如何计算第一条扫描线与多边形各个边的交点以及扫描线与新的边相交时的交点。可以把多边形所有边放入一个表中,对于每一条扫描线,就遍历这个表,求得交点。但是很多情况下,一条扫描线仅与少数几条边有交点,如果每次都遍历所有边,效率就会很低。所以我们仅对与该扫描线相交的边进行求交。这些与当前扫描线相交的边我们称之为“活性边”,把它们放入一个“活性边表”AEL中,这样每次遍历AEL 就可以了。AEL 中每一个结点都是一个边,它保存对应边的信息,比如扫描线与该边的交点,该边的两个顶点坐标(未必是四个坐标值,

有可能是其他唯一确定一条边的等价信息) 。

五是如何构造这个AEL 表。上面说AEL 中存放与当前扫描线相交的各个边,但是怎么知道所有边中哪一些和当前扫描线相交呢?显然,当前扫描线位于某条边最小y 值和最大y 值之间时,扫描线和那条边有交点。所以可以这样解决:建立一个边的分类表ET ,将所有边按照其最小y 值分类,放在表中对应位置,然后每一条边又包含有自己的最大y 值,这样就可以知道是不是与扫描线有交点了。对于每一条扫描线,都先判断是否有新的边需要加入到AEL 中,是不是有旧的边需要从AEL 中删除。然后再遍历AEL 求交点。

总结一下,求扫描线算法步骤如下:

建立ET

对于每一条扫描线

如果有新边就向AEL 中插入新边

从AEL 中删除最大y 值小于等于该扫描线的边

遍历AEL 获取交点,并将交点排序

更新AEL 中各个边的x 值,将其作为下一条扫描线与该边的交点

将交点两两配对,绘制线段

对于这一程序的实现,将在下一篇文章中给出。


相关内容

  • 广西民大计算机图形学教学大纲(软件)2010
  • <计算机图形学>教学大纲 Computer Graphics 以下部分标题填写用黑体五号字体,具体填写内容字体为宋体五号) [课程编号]XZ25127 [学分数]2 [课程类别]专业限选课 [先修课程]C/C++程序设计,解析几何, 线性代数. [学时数]40(20+16(实验)+4) ...

  • 计算机图形
  • 第一章 导论 1 计算机图形学是什么?主要应用领域有哪些? 答:计算机图形学是一种使用图形生成原理和算法将二维或三维图形转化为光栅化的计算机显示的学科. 答:计算机图形学已经在科学,艺术,电影,商业,广告,教学和培训等领域广泛应用. 2 名词解释:参数法.点阵.图形.图像 参数法:是在设计阶段采用几 ...

  • 计算机图形学期末考试题
  • 1.已知一直线段起点(0,0),终点(8,6),利用Bresenham 算法生成此直线段,写出生成过程中坐标点及决策变量d 的变化情况,并在二维坐标系中,标出直线上各点. 2.试用中点画圆算法原理推导第一象限中y=0到x=y半径为R 的圆弧段的扫描转换算法.(要求写清原理.误差函数和递推公式,并进行 ...

  • 计算机图形学期末考试试卷(D卷)
  • 计算机图形学期末考试试卷(D 卷) 一. 填空题(每空1分,共10分) 1. 图形的表示方法有两种: 和 . 2. 目前常用的两个事实图形软件标准是OpenGL 和 . 3. 多边形有两种表示方法: 和点阵表示法. 4. 二维图形基本几何变换包括平移. . 等变换. 5. 投影可以分为 投影和 投影 ...

  • 计算机图形学常用算法及代码大全
  • 2.1.1 生成直线的DDA 算法 数值微分法即DDA 法(Digital Differential Analyzer),是一种基于直线的微分方程来生成直线的方法. 一.直线DDA 算法描述: 设(x1,y 1) 和(x2,y 2) 分别为所求直线的起点和终点坐标,由直线的微分方程得 可通过计算由x ...

  • 快速制造技术
  • 目 录 第1章 快速制造技术 . ............................................ 1 1.1 快速制造技术概念 ........................................... 1 1.2 快速制造技术的原理 ............. ...

  • 计算机图形学复习题+试卷
  • 一.名词解释: 1.计算机图形学 研究怎样用计算机生成.处理和显示图形和科学. 2.图象处理 将客观世界中原来存在的物体映象处理成新的数字化图象. 3.凸多边形 是指这样一类多边形:在多边形内任选两个点,将这两个点用线段连接后,此线段上所有的点都在多边形内. 4.种子填充算法 根据已知多边形区域内部 ...

  • 遥感图像多尺度分割算法与矢量化算法的集成
  • 第40卷 .厂01.40 第6期 No.6 计算机工程 ComputerEngineering 文章编号:1000-3428(2014)06-0256-06 文献标识码:A 2014年6月 June2014 -图形图像处理- 中图分类号:TP751.1 遥感图像多尺度分割算法与矢量化算法的集成 王海 ...

  • 地理信息系统名词解释大全
  • 地理信息系统名词解释大全 导论 ----------------------------------------------------------- 1. 地理信息系统(南大95.南大96.南大03.中科院03.中科院04.华东师00.中南03.浙大99)GIS 作为信息技术的一种,是以计算机技术 ...