Y第四章光栅图形的扫描转换与 区域填充 扫描转换矩形 扫描转换多边形 区域填充 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 第四章 光栅图形的扫描转换与 区域填充 扫描转换矩形 扫描转换多边形 区域填充
扫描转换矩形 问题: 矩形是简单的多边形,那么为什么要单独 处理矩形? 比一般多边形可简化计算。 应用非常多,窗口系统。 共享边界如何处理? 原则:左闭右开,下闭上开 属于谁? 失学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 扫描转换矩形 • 问题: –矩形是简单的多边形,那么为什么要单独 处理矩形? 比一般多边形可简化计算。 应用非常多,窗口系统。 –共享边界如何处理? • 原则:左闭右开,下闭上开 属于谁?
扫描转换矩形 方法 void FillRectangle rectangle *rect, int color) fint x ,y; forly= rect->ymin; y ymax; y++) for(x= rect->xmin; xxmax; x++ PutPixel(x,J,colr少; end of fillrectangle0
浙江大学信息学院 计算机图形学 扫描转换矩形 • 方法: void FillRectangle(Rectangle *rect,int color) { int x,y; for(y = rect->ymin;y ymax;y++) for(x = rect->xmin;x xmax;x++) PutPixel(x,y,color); }/*end of FillRectangle() */
扫描转换多边形 ·多边形分为凸多边形、凹多边形、含内环的多 边形。 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 扫描转换多边形 • 多边形分为凸多边形、凹多边形、含内环的多 边形
扫描转换多边形 多边形的表示方法 顶点表示 点阵表示 ·顶点表示:用多边形顶点的序列来刻划多边形。 直观、几何意义强、占内存少;不能直接用于 面着色 ·点阵表示:用位于多边形内的象素的集合来刻 划多边形。失去了许多重要的几何信息;便于 运用帧缓冲存储器表示图形,易于面着色 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 扫描转换多边形 • 多边形的表示方法 –顶点表示 –点阵表示 • 顶点表示:用多边形顶点的序列来刻划多边形。 直观、几何意义强、占内存少;不能直接用于 面着色。 • 点阵表示:用位于多边形内的象素的集合来刻 划多边形。失去了许多重要的几何信息;便于 运用帧缓冲存储器表示图形,易于面着色
多边形的扫描转换 多边形的扫描转换:把多边形的顶点表示转 换为点阵表示,也就是从多边形的给定边界 出发,求出位于其内部的各个象素,并给帧 缓冲器内的各个对应元素设置相应的灰度和 颜色,通常称这种转换为多边形的扫描转换。 几种方法:逐点判断法;扫描线算法;边缘 填充法;栅栏填充法;边界标志法。 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 多边形的扫描转换 –多边形的扫描转换:把多边形的顶点表示转 换为点阵表示,也就是从多边形的给定边界 出发,求出位于其内部的各个象素,并给帧 缓冲器内的各个对应元素设置相应的灰度和 颜色,通常称这种转换为多边形的扫描转换。 –几种方法:逐点判断法;扫描线算法;边缘 填充法;栅栏填充法;边界标志法
逐点判断法 KAG UNVES #define MaX 100 Typedef struct{ int Polygon Num;∥多边形顶点个数 Point vertexcesMAX]∥多边形顶点数组 } Polygon∥多边形结构 void FillPolygonPbyP(Polygon Pint polygon Color) int x, y, for(y=ymin; y <=ymax; y++) for(x=xmin; x<=xmax; x++) if(iNside(px, n) PutPixellx, v, polygon Color) else PutPixel(x, y, backgroundcolor f /end of fillpolygonPbyP0*/ 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 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() */ #define MAX 100 Typedef struct { int PolygonNum; // 多边形顶点个数 Point vertexces[MAX] //多边形顶点数组 } Polygon // 多边形结构 逐点判断法
逐点判断法 逐个判断绘图窗口内的像素: 如何判断点在多边形的内外关系? 1)射线法: 2)累计角度法 3)编码法; 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 逐点判断法 • 逐个判断绘图窗口内的像素: • 如何判断点在多边形的内外关系? 1)射线法: 2)累计角度法 3)编码法;
逐点判断法 1)射线法 步骤 1.从待判别点v发出射线 2.求交点个数k 3.K的奇偶性决定了点与多边形的内外关系 PO
浙江大学信息学院 计算机图形学 逐点判断法 1)射线法 • 步骤: 1. 从待判别点v发出射线 2. 求交点个数k 3. K的奇偶性决定了点与多边形的内外关系
逐点判断法 2)累计角度法 步骤 1.从v点向多边形P顶点发出射线,形成有向角O 2.计算有相交的和,得出结论 0,p位于P之外 ±2兀,位于P之内 义f 预处理 离散计算方法:编码方法 B 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 逐点判断法 2)累计角度法 • 步骤 1. 从v点向多边形P顶点发出射线,形成有向角 2. 计算有相交的和,得出结论 • 预处理 • 离散计算方法:编码方法 = = 位于 之内 , 位于 之外 v P n v P i i 2 , 0 0 i