接着上篇博文《 多边形的扫描转换》

转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7712451

多边形

边相关扫描线填充算法需要建立两张表:新边表(New Edge Table,NET)和 活动边表(Active Edge Table,AET)

新边表 NET

记录多边形除水平边外的所有的边,记录在没条扫描线的表中,记录的格式为: 
x 当前扫描线与边的交点坐标;dx从当前扫描线到下一条扫描线间x的增量((x2-x1)/(y2-y1));ymax 该边所交的最高扫描线
上图的多边形,建立的新边表如下:

活动边表 AET

记录只与当前扫描线相交的边的链表。
NET表建立以后,就知道了多边形所有的边,所以就能开始扫描转换。不同的扫描线相交的边线也不同,当对某一条扫描线进行扫描转换时,我们只需要考虑与它相交的那些边线,也就是活动边表中的边。 
记录的格式还是用 x | dx | ymax 。只是这里 表示扫描线与边的交点的坐标。
以第6条扫描线为例:
第6条扫描线的活动边表如下:

合并NET得到AET

实际计算时不是去算没条扫面线与多边形边的交点得到活动边表AET(否则也看不到算法意义了),而是用NET补充得到AET。
注意到表示格式第三个量为 ymax,表示该边所交的最高扫描线,那么小于 ymax的扫描线都应该与这条边相交。
所以看NET那个表中第二条扫描线与P1P6相交,ymax为7,那么第3,4,5,6条扫描线应该都与P1P6相交。关键是求交点横坐标 x 的值。第二个量 dx 表示从当前扫描线到下一条扫描线间x的增量,所以下一条扫描线交点 x'=x+dx。所以第3,4,5,6条扫描线与P1P6交点横坐标都是2。
由此补全NET表:

边的扫描转换算法

两个表建立完后,开始扫描转换。整体算法步骤描述如下:
[plain] view plaincopy
  1. 1、根据给出的多边形顶点坐标,建立NET表;
  2. 求出顶点坐标中最大y值ymax和最小y值ymin。
  3. 2、初始化AET表指针,使它为空。
  4. 3、执行下列步骤直至NET和AET都为空.
  5. 3.1、如NET中的第y类非空,则将其中的所有边取出并插入AET中;
  6. 3.2、如果有新边插入AET,则对AET中各边排序;
  7. 3.3、对AET中的边两两配对,(1和2为一对,3和4为一对,…),
  8. 将每对边中x坐标按规则取整,获得有效的填充区段,再填充.
  9. 3.4、将当前扫描线纵坐标y值递值1;
  10. 3.5、如果AET表中某记录的ymax=yj,则删除该记录 (因为每条边被看作下闭上开的);
  11. 3.6、对AET中剩下的每一条边的x递增dx,即x' = x+ dx .
参考资料:计算机绘图(重庆大学软件学院 杨梦宁 徐玲)
PPT讲解下载:http://download.csdn.net/detail/xiaowei_cqu/4408894

边相关扫描线填充算法相关推荐

  1. 多边形区域填充算法--扫描线填充算法(有序边表法)

    来源:https://blog.csdn.net/u013044116/article/details/49737585 二.扫描线算法(Scan-Line Filling) 扫描线算法适合对矢量图形 ...

  2. 图形学扫描线填充算法

    在上图形学课的时候,学习了扫描线填充算法.不过在完成实验的时候在真正理解了该算法,在此记录一下,如果有表达上的错误,欢迎指正! 扫描线填充算法通过在与图形相交的第(1,2).(3,4)... 边之间划 ...

  3. c语言图形学扫描线填充算法,《计算机图形学》OpenGL实现扫描线填充算法

    顾名思义啊,就是在OpenGL中用扫描填充算法画一个稍微复杂的图形: #include #include #include #include #define COLOR_NEW 1.0,0.0,0.0 ...

  4. c++多边形扫描线填充算法_基于3DGIS技术的梯形格网构建及其简化算法设计

    传统矢量地图LOD绘制流程包含简化.剖分与渲染三个步骤.由上述分析可知,传统矢量地图LOD绘制流程中简化与剖分是两个独立的过程,重复的剖分计算导致其渲染效率相对低下.梯形格网方法解决了传统方法中重复剖 ...

  5. CG-多边形扫描线填充算法详解

    目录 1.基本思想 2.算法步骤 3.例题 4.算法的优缺点 1.基本思想         对于一个多边形,用一组水平或垂直的扫描线进行扫描,求出每条扫描线与多边形的交点,这些交点将扫描线分割线段,将 ...

  6. 计算机图形学--扫描线填充算法

    目录 基本思想 有序边表思想 代码实现 基本思想 从图形的y最小值到y最大值依次进行y上的遍历,遍历的每个y=c这条直线称为扫描线.对于每条扫描线,多边形会和这条直线存在若干交点.这些交点中的之间的线 ...

  7. 扫描线填充算法(DDA应用)

    欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击. 本期话题:给定多边形的边如何填充多边形内部区域 朴素做法 枚举法 枚举屏幕上的每一点,判断点是否在多边形内.点在多边形内判断方法 ...

  8. matlab多边形扫描线填充算法代码,计算机图形学—多边形扫描与填充

    [实例简介] 包含了AET扫描算法.边界填充法.四连通种子算法 [实例截图] [核心代码] 63815b9f-1212-4c77-8732-11bf70c1ca86 └── 多边形扫描及填充 ├── ...

  9. c++多边形扫描线填充算法_基于MATLAB的道格拉斯普克算法递归实现

    道格拉斯普克算法 (道格拉斯-普克)Douglas-Peukcer算法由D.Douglas和T.Peueker于1973年提出,是线状要素抽稀的经典算法.用它处理大量冗余的几何数据点,既可以达到数据量 ...

  10. 扫描线填充算法代码_手写算法并记住它:计数排序

    对于经典算法,你是否也遇到这样的情形:学时觉得很清楚,可过阵子就忘了? 本系列文章就尝试解决这个问题. 研读那些排序算法,细品它们的名字,其实都很贴切. 比如计数排序,所谓"计数" ...

最新文章

  1. Android:展开/折叠动画
  2. 如何在Ruby中写入文件?
  3. 5G 信令流程 — MM 定时器
  4. Android 屏幕旋转时Activity的变化
  5. 如何修改elementUI里面Dialog组件标题的样式
  6. mysql怎么看实例名_南方“中看不中吃”的前4名水果,莲雾只是垫底,你怎么看?...
  7. java 创建数组工具类_用Java创建数组工具类ArrayTool
  8. 美团员工被指用钓鱼邮件获拼多多薪资;华为回应暂无其它手机厂商接入HarmonyOS;GCC 放弃版权转让政策|极客头条...
  9. Fast Marching on 3D Meshes
  10. 实战Python:利用Python实现基于终端的文本行编辑程序
  11. QTP教程入门到高级(转)
  12. 大气压力换算公式_大气压强计算新方法
  13. proteus——rs-232双机通讯
  14. 重置网络命令win7
  15. 打印后台处理程序服务怎么开启
  16. CVPR2019目标检测
  17. numpy的getA()/getA1()/getH()/getI()函数
  18. 10【Mybatis延迟加载】
  19. python-----定制群发微信消息
  20. RocketMQ-Retry

热门文章

  1. Oracle实例恢复
  2. html 制作静态页面新知识
  3. Squid 代理服务器
  4. Aria2 一键安装管理脚本 与Snap安装Nextcloud 与离线下载百度云
  5. Spring中都用到了那些设计模式
  6. (day9)357. 计算各个位数不同的数字个数
  7. insserv: warning: script 'lampp' missing LSB tags and overrides
  8. hdu 6205: card card card【输入挂】
  9. 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
  10. 斯坦福大学CS224d基础1:线性代数回顾