多边形的扫描转换 多边形的扫描转换:把多边形的顶点表示转 换为点阵表示,也就是从多边形的给定边界 出发,求出位于其内部的各个象素,并给帧 缓冲器内的各个对应元素设置相应的灰度和 颜色,通常称这种转换为多边形的扫描转换。 几种方法:逐点判断法;扫描线算法;边缘 填充法;栅栏填充法;边界标志法。 浙江大学信息学院 计算机图形学
浙江大学信息学院 计算机图形学 多边形的扫描转换 –多边形的扫描转换:把多边形的顶点表示转 换为点阵表示,也就是从多边形的给定边界 出发,求出位于其内部的各个象素,并给帧 缓冲器内的各个对应元素设置相应的灰度和 颜色,通常称这种转换为多边形的扫描转换。 –几种方法:逐点判断法;扫描线算法;边缘 填充法;栅栏填充法;边界标志法
逐点判断法 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