计算机图形学 您所在的位置:网站首页 连通区域算法的优缺点有哪些呢 计算机图形学

计算机图形学

2024-07-11 04:35| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有