计算机图形学 | 您所在的位置:网站首页 › 连通区域算法的优缺点有哪些呢 › 计算机图形学 |
Sep 24, 2022
计算机图形学——二维图元的填充
Shawn NotesComputer Graphics 4473 Words 2022-09-24 06:14 +0000 扫描转换矩形 算法核心要填充一个矩形,我们只需要4个数据就可以确定矩形了。只需要确定左下顶点 $(x_\min,y_\min)$ 和右上顶点 $(x_\max,y_\max)$,这个矩形就被唯一的确定了。 因此,一个最简单的方法是使用两层循环,使用类似于二重积分的方式完成这样的过程。他的代码实现如下: void FillRectangle (Rectangle *rect, int color) { int x, y; // 将绘制的直线沿着y轴移动 for(y = rect->ymin; y ymax; y++) // 沿着x轴,绘制平行于x轴的直线 for(x = rect->xmin; x xmax; x++) PutPixel(x, y, color); }如果将绘制直线简化,可以减少一个循环,但是总体思想是完全相同的。 for (y = rect->ymin; yymax; y++) DrawLine(xmin, y, xmax, y, color); 问题这个算法本身并不难理解。不过其中也是有几个问题需要解决: 为什么要单独为矩形设计算法,而不是直接使用之后的多边形算法?主要的原因是多边形生成算法计算更加复杂。尽管矩形是一种特殊的多边形,也可以使用这种算法来生成,但是上述的算法计算更加简单、性能更好,因此单独设计了算法。 如果出现多个矩形相邻,如何判定公共边?原则:**左闭右开,下闭上开。**即矩形左边、下边的像素属于矩形。 扫描转换多边形扫描转换多边形主要由下面三种方法: 逐点判断法 扫描线算法 边缘填充法下面将分别介绍这三种方法。 逐点判断法 算法核心逐点判断法的填充的算法十分简单,其代码实现如下: #define MAX 100 typedef struct { int PolygonNum; // 多边形顶点个数 Point vertexces[MAX]; //多边形顶点数组 } Polygon; // 多边形结构 void FillPolygonPbyP(Polygon *P, int polygonColor) { int x, y; for (y = ymin; y |
CopyRight 2018-2019 实验室设备网 版权所有 |