多边形的扫描转换边填充算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
属于谁?
© 2004 Dept. of Computer Science and Engineer 2018/10/6 5 / 56
多边形的扫描转换
多边形的表示方法: - 顶点表示:用多边形的顶点序列刻划多边 形;
-
点阵表示:用位于多边形内象素的集合来 刻划多边形;
-
扫描转换多边形:将顶点表示形式转换成 点阵表示形式; 三种方法:逐点判断法;扫描线算法;边 缘填充法;
© 2004 Dept. of Computer Science and Engineer 2018/10/6 4 / 56
多边形的扫描转换
扫描转换矩形(2/2):
-
矩形是简单的多边形,那么为什么要单独处理矩形?
比一般多边形可简化计算; 应用多: 如窗口系统;
-
共享边界如何处理?
原则:左闭右开,下闭上开
© 2004 Dept. of Computer Science and Engineer 2018/10/6 7 / 56
多边形的扫描转换
逐点判断法
•逐个判断绘图窗口内的像素: •如何判断点在多边形的内外关系? 1)射线法; 2)累计角度法; 3)编码法; •1)射线法 步骤: 1) 从待判别点v发出射线; 2) 求交点个数k; 3) K的奇偶性决定了点与多边形的内 外关系; 4)奇异情况处理;
© 2004 Dept. of Computer Science and Engineer
2018/10/6
11 / 56
多边形的扫描转换:扫描线算法:
扫描线算法:
-
பைடு நூலகம்
目标:利用相邻像素之间的连贯性,提高算法效率; 处理对象:非自交多边形 (边与边之间除了顶点外无其它交点);
2018/10/6
2 / 56
区域填充
区域:点阵表示的图形,像素集合; 表示方法:内点表示、边界表示: - 内点表示:-》区域填充算法 枚举处区域内部的所有像素; 内部的所有像素填充同一个颜色; 边界像素填充与内部像素不同的颜色; - 边界表示:枚举出边界上所有的像素-》边界填充算法; 边界上的所有像素填充同一颜色; 内部像素填充与边界像素不同的颜色; 区域填充:对区域重新着色的过程,即从给定位置开始涂描直到指定 的边界条件为止; - 将指定的颜色从种子点扩展到整个区域的过程; - 区域填充算法要求区域是连通的; 一般步骤: - 确定那些像素位于填充图元的内部; - 确定以什么颜色填充这些像素;
© 2004 Dept. of Computer Science and Engineer
2018/10/6
3 / 56
多边形的扫描转换
扫描转换矩形(1/2):
void FillRectangle(Rectangle *rect,int color) { int x,y; for(y = rect->ymin; y <= rect->ymax; y++) for(x = rect->xmin; x <= rect->xmax; x++) PutPixel(x,y,color); }/*end of FillRectangle() */
n
预处理; 离散计算方法:编码方法;
© 2004 Dept. of Computer Science and Engineer
2018/10/6
9 / 56
多边形的扫描转换
逐点判断法
•3)编码方法:累计角度方法的离散方法 Step: a.预处理,测试点在边上否? b.V为中点作局部坐标系,对象限按逆时针 (或顺时针)编码; P1 c.顶点编码Ipi, d.边编码。PiPi+1: △PiPi+1=Ipi+1-Ipi e.计算∑ △PiPi+1 (其中△PnPn+1 = △PnP0): 若 ∑ 为0, V在P外;若 ∑ 为+/-4,V 在 P内;
P0
v P2
结论:逐点判断法程序简单,速度太慢,效率低。
© 2004 Dept. of Computer Science and Engineer 2018/10/6 10 / 56
多边形的扫描转换:扫描线算法:
-
几个概念:
边的连贯性:某条边与当前扫描线相交,也可能与下一条扫描 线相交; 扫描线的连贯性:当前扫描线与各边的交点顺序与下一条扫描 线与各边的交点顺序可能相同或类似; 区间连贯性:同一区间上的像素取同一颜色属性;
第四章 基本图形生成算法 (二)
© 2004 Dept. of Computer Science and Engineer
2018/10/6
主要内容:
直线的扫描转换
圆与椭圆的扫描算法
区域填充 线宽与线型的处理 字符 裁剪
反走样
© 2004 Dept. of Computer Science and Engineer
© 2004 Dept. of Computer Science and Engineer 2018/10/6 8 / 56
多边形的扫描转换
逐点判断法
•2)累计角度法 步骤: 从v点向多边形P顶点发出 射线,形成有向角; 计算有相交的和,得出结论;
0,v位于P之外 i i 0 2 , v位于P之内
2018/10/6 6 / 56
-
© 2004 Dept. of Computer Science and Engineer
多边形的扫描转换
逐点判断法
#define MAX 100
typedef struct{
int PolygonNum; // 多边形顶点个数 Point vertexces[MAX] //多边形顶点数组 } Polygon // 多边形结构 void FillPolygonPbyP(Polygon *P, int polygonColor) { int x,y; for(y = ymin; y <= ymax;y++) for(x = xmin; x <= xmax;x++) if( IsInside( P, x, y ) ) PutPixel(x, y, polygonColor); else PutPixel(x, y, backgroundColor); }/*end of FillPolygonPbyP() */