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