多边形扫描转换算法中的边表(Edge Table, ET)
目录
文章目录
- 目录
- 边表(Edge Table, ET)
边表(Edge Table, ET)
在多边形的扫描转换算法中,我们首先需要建立一个全局的边表(ET),它包含多边形的所有边,并且这些边按照它们各自y坐标较小值( y m i n y_{min} ymin)排序。
有资料也把这个全局的边表称为新边表(New Edge Table, NET),但是意思是一样的,即多边形扫描转换算法初始化时建立的全局边表。
ET是基于桶排序的方式建立的,有多少扫描线就有多少个桶(一般在最下面的桶下面再多加一个,看下面的例子就知道是什么意思了),每一个桶对应一个链表,每一个链表中的边的下端端点的纵坐标是相同的。然后在每个桶中,根据边的较低的端点的x坐标( x m i n x_{min} xmin),按照增序的方式对边进行排序。
ET(边表)中每一个链表的节点(每个节点对应一条边)包含下列信息:
- 边的 y m a x y_{max} ymax坐标值
- 边的下端端点的x坐标 x m i n x_{min} xmin。
注意这里 x m i n x_{min} xmin is the x at the minimum y for the edge, not necessarily the minimum x of the edge. Hence x m i n = 7 x_{min} = 7 xmin=7 for edge AB in 图3.14. - 随着扫描线递变到下一条线时的x坐标的增量1/m, (斜率的导数,m是斜率,slope)
形象的展示一下:
y m a x y_{max} ymax | x m i n x_{min} xmin | 1/m |
---|
边表包含所有的边
- sorted by their smaller y coordinate of edge. ( y m i n y_{min} ymin)
- If smaller y coordinates of edge are equal
- edges are sorted in order of increasing x coordinate of the lower endpoint of edge. ( x m i n x_{min} xmin)
- And if two x coordinates of the lower endpoint of edge are equal
- edges are sorted according to the slope(斜率) of edge. ( m m m)
总结一下如何构建边表
1.按照每条边的 y m i n y_{min} ymin进行桶排序。
2.在一个桶中,按照 x m i n x_{min} xmin递增的顺序进行排序。
3.如果 x m i n x_{min} xmin也相同,那就按照边的斜率递增的顺序进行排列。
光说不练假把式。
下图中有个多边形ABCDEF,
格点的坐标写上去之后就是下面这个图。
该多边形的边表(ET)如下:
1.有多少条扫描线就有多少桶。
最低点是1, 我不知道为什么要把0也写上,暂时就多写一个吧。
最高点是11, 所以扫描线最高是11,没有问题
2.根据每个边的 y m i n y_{min} ymin对边进行桶排序
一共有多少个 y m i n y_{min} ymin?,分别是多少?对应那几条边?
1 -> AB, BC
3 -> FA
5 -> CD
7 -> EF, DE
所以0,2,4,6,8,9,10,11都是空的,这里用 λ \lambda λ进行占位。(为什么要用 λ \lambda λ,记住就好了)。
3.如果边的 y m i n y_{min} ymin相同,则按照 x m i n x_{min} xmin的顺序进行排列。(这个我感觉是针对水平边的,因为水平边是被忽略的,这样以来,水平边的两个端点的 x m i n x_{min} xmin就不同了)
4.如果边的 y m i n y_{min} ymin和 x m i n x_{min} xmin都相同,则按照边的斜率进行排序。
所以这就是扫描线7,中EF排在前,DE排在后的原因了。
OK,到此多边形扫描转换中的边表就讲清楚了,接下来讲解活性边表(Active Edge Table, AET)。
多边形扫描转换算法中的边表(Edge Table, ET)相关推荐
- 多边形扫描转换算法(C语言实现)
多边形扫描转换算法(C语言实现) 原理不赘述 原理可跳转至该文章 ET边表 AET链表 实现 该算法我实在计算机图形学的书上看到了,但是遗憾的是看懂了,并没有算法实现.该算法的优势很是很明显的对于种子 ...
- 计算机图形学常用算法实现4 多边形扫描转换算法-边界标志算法
代码是在winform中运行的. 看书上这个算法写起来轻描淡写的,实际上实现起来还是有很多难点的,难点如下: 1.无法判断经过某个点的时候是不是应该变号. 2.扫描算法画直线的时候,可能同一行有多个点 ...
- [计算机图形学算法]直线扫描转换算法-中点画线法
DDA算法用斜截式表示直线方程,简化了乘法运算,但任存在浮点运算. 我们猜想,用别的方式表示直线,是否能把浮点运算也简化为整数运算. 在中点画线法中,我们用Ax+By+C=0的一般式方程来表示直线,即 ...
- 多边形的扫描转换算法——扫描线算法(计算机图形学)
扫描线算法是扫描转换多边形的常用算法,它充分利用了相邻像素之间的连贯性,避免了逐点判断和反复求交计算,达到了减少计算量和提高算法效率的目的. 处理对象:非自交多边形 (边与边之间除了顶点外无其它交点) ...
- 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法
前言 本笔记基于 http://www.icourse163.org/learn/CAU-45006?tid=1001746004#/learn/announce 感谢中国农大 赵明老师的分享~ 现在 ...
- 13图形光栅化——区域填充(种子填充)+多边形扫描转换(扫描线算法)
♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥,.*,.♥♥,.*,.♥,.*,.♥,.*,.♥,.*♥,.*,.♥,.*,.♥ ...
- 多边形填充算法-有序边表法(扫描线算法) 计算机图形学
1.算法的基本思想(扫描线连贯性原理): 对于一个给定的多边形,用一组水平(垂直)的扫描线进行扫描,对每一条扫描线均可求出与多边形边的交点,这些交点将扫描线分割成落在多边形内部的线段和落在多边形外部的 ...
- 多边形填充算法-有序边表法(扫描线算法)
1.算法的基本思想(扫描线连贯性原理): 对于一个给定的多边形,用一组水平(垂直)的扫描线进行扫描,对每一条扫描线均可求出与多边形边的交点,这些交点将扫描线分割成落在多边形内部的线段和落在多边形外部的 ...
- 多边形区域填充算法--扫描线填充算法(有序边表法)
来源:https://blog.csdn.net/u013044116/article/details/49737585 二.扫描线算法(Scan-Line Filling) 扫描线算法适合对矢量图形 ...
最新文章
- 10 python中的常量
- 程序员的职业素养(读书笔记)-- 第一章
- SizeBasedAndTimeBasedLog
- CAS5.3.14安装、配置完全教程
- 总线上加三个终端电阻可以吗_汽车维修中CAN总线的常规检修方法!
- Python time asctime()方法
- .NET MVC运行周期
- 初学C语言没有项目练手怎么行,这17个小项目收下不谢
- php模板怎么导入服务器_php项目怎么放到服务器
- 如何找到JavaScript中的调用者函数?
- Cowboy 源码分析(二十六)
- echart 世界地图发光_echart世界地图(并且指定国家高亮显示)?
- 舵机的相关原理与控制原理
- 海康isapi协议原理学习(Intelligent Security API 智能安全API)
- 原装win10下安装双系统win7
- HIVE厂牌艺人_北京音乐节-北京音乐节全攻略 - 马蜂窝
- 一个网页设计需求方眼中的网页设计
- uniApp 实现微信小程序和app视频播放flv格式视频监控
- 地理科学国内外核心期刊汇总
- [Python从零到壹] 四十五.图像增强及运算篇之图像灰度非线性变换详解
热门文章
- Cannot obtain license for Compiler (feature compiler) with license version = 2.2(转)
- linux下ic卡驱动程序,multifunction device驱动下载
- 3、kubeadm部署Kubernetes 网络插件flannel、Calico、weave 并设置集群角色
- Q Inventory System unity背包物品插件 使用笔记
- 一些有用的Web或者手机UI设计工具
- 河北省计算机应用与基础知识,2013河北省职称计算机应用能力考试基础知识分章整理...
- java写键盘鼠标录制器,易语言仿按键精灵录制键盘鼠标操作的代码
- 三星s4系统更新无法连接到服务器,图解三星S4连接不上Kies软件的解决方法
- 成都华西健康管理(体检)中心体检套餐
- 浅谈跟美女上床和次贷危机