计算机图形学——多边形的扫描转换

一、多边形扫描转换

在光栅图形中,区域是由【相连的】像素组成的集合,这些像素具有【相同的】属性值或者它们位于某边界线的内部

1、光栅图形的一个基本问题是把多边形的顶点表示转换为点阵表示。这种转换成为多边形的扫描转换。
2、多边形的扫描转换与区域填充问题是怎样在离散的像素集上表示一个连续的二维图形。
3、多边形有两种重要的表示方法:

(1)顶点表示:用多边形的定点序列来表示多边形
    优点:直观、几何意义强、占内存少、易于进行几何变换
    缺点:没有明确指出那些象素在多边形内,故不能直接用于上色
(2)点阵表示:是用位于多边形内的象素集合来刻画多边形
    缺点:丢失了许多几何信息(eg:边界、顶点等)

但是【点阵表示是光栅显示系统显示时所需的表现形式。】

多边形的扫描转换就是把多边形的顶点表示转换为点阵表示,即从多边形的给定边界出发,求出位于其内部的各个像素,并将帧缓冲器内的各个对应元素设置相应的灰度或颜色。实际上就是多边形内的区域的着色过程。

4、多边形分类

二、X扫描线算法

X扫描线算法填充多边形的基本思想是按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的象素,即完成填充工作。

区间的端点可以通过计算扫描线与多边形边界线的交点获得。

如扫描线y=3与多边形的边界相交于4点(2,3)、(4,3)、(7,3)、(9,3)

这四个点定义了扫描线从x=2到x=4,从x=7到x=9两个落在多边形内的区间,该区间内像素应取填充色。

算法的核心是按x递增顺序排列交点的x坐标序列。由此可得到扫描线算法步骤如下:

算法步骤:
    1.确定多边形所占有的最大扫描线数,得到多边形定点的最小最大值(ymin和ymax);
    2.从yminymax每次用一条扫描线进行填充;
    3.对一条扫描线填充的过程分为四个步骤:
      a)求交点;
      b)把所有交点按递增顺序排序;
      c)交点配对(第一个和第二个,第三个和第四个);
      d)区间填色。把相交区间内的像素置成多边形的颜色,相交区间外的像素置成背景色。

扫描线与多边形顶点相交时,交点的取舍问题【交点应保证为偶数个】

交点问题的处理:

为了计算每条扫描线与多边形各边的交点,最简单的方法是把多边形的所有边放在一个表中。在处理每条扫描线的时候,按顺序从表中取出所有的边,分别与扫描线求交。

但这个算法效率很低

因为关键问题是求交! 求交是很可怕的,求交的计算量非常大。‘

排序、配对、填色总是要的!

三、多边形的扫描转换算法的改进

扫描转换算法重要的意义是提出了图形学里两个重要的思想:
(1)扫描线:当处理图形图像时按一条条扫描线处理
(2)增量的思想。

已经知道X-扫描线算法效率低是因为求交麻烦,那求教点的时候能否也采用增量思想,每条扫描线的y值都知道,关键是求x值。

可以从三个方面改进:

1、在处理一条扫描线时,仅对与它相交的多边形的边(有效边)进行求交运算。

2、考虑扫描线的连贯性,也就是当前扫描线与各边交点顺序与下一条扫描线边与各边的交点顺序很可能相同或非常相似。

3、考虑多边形的连贯性,即当某条边与扫描线相交时它很可能与下一条扫描线也相交。

为了避免求交运算,需要引进一套特殊的数据结构

数据结构:

(1)活性边表(AET):把当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放在一个链表中。

上图中P4P1、P3P2是活性边,P4P3、P1P2是非活性边

(2)节点内容:x:当前扫描线与边的交点坐标
               Δx:从当前扫描线到下一条扫描线间x的增量
               ymax:该边所交的最高扫描线的坐标值
               next:指向下一条边的指针

另外,需要知道一条边何时不再与下一条扫描线相交,以便及时把它从有效边表中删除出去,避免下一步进行无谓的计算。

 一个具体的例子:

(3)新边表(NET):为了方便活性边表的建立与更新,用来存放多边形的边的信息,分为4个步骤
       1.构造一个纵向链表,长度为多边形所占有的最大扫描线数,链表的每个结点称为吊桶,对应多边形覆盖的每一条扫描线。
       2.新边表(NET)挂在与【该边低端y值相同】的扫描线桶中。也就是说,存放在该扫描线第一次出现的边

ymax:该边的最大值;
      xmin:该边较低点的x坐标值xmin;
      1/k:该边的斜率
      next:指向下一条具有相同较低端y坐标的边的指针

从上边的这个NET表里就知道多边形是从哪里开始的

从这个表里只有1、3、5、7处有边,从y=1开始做,而1这条线上有两条边进来了,然后就把这两条边放入活性表来处理。

3.每做一次新的扫描时,要对已有的边进行三个处理:
1.是否被去除掉;
2.若不被去除掉,就要对它的数据进行更新,x=x+1/k;
3.是否有新的边进来,新的边在NET里,可以插入排序插进来。

这个算法过程从来没有求交,这套数据结构使得你不用求交点!避免了求交运算。

原文地址:https://www.cnblogs.com/wkfvawl/p/11622265.html

时间: 2024-11-06 07:28:48

计算机图形学——多边形的扫描转换的相关文章

计算机图形学之光栅图形学——多边形的扫描转换之 X-扫描算法及改进

本文是对 赵明老师 <计算机图形学>MOOC课程 部分章节的小总结. 多边形有两种表示方法:顶点表示和点阵表示. X-扫描线算法: 算法步骤概括如下: 注意: 改进: 为了避免求交运算,引进一套特殊的数据结构:

计算机图形学 圆的扫描转换(2)

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40042591 本文通过一个完整的实例,演示圆的扫描转换. 1)创建CP2类 头文件:p2.h // P2.h: interface for the CP2 class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_P2_H__709052D

计算机图形学 椭圆的扫描转换(3)

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40045907 本文通过一个完整的实例,演示椭圆的扫描转换. 1)创建CEllipse类 头文件:Ellipse.h // Ellipse.h: interface for the CEllipse class. // ////////////////////////////////////////////////////////////////////// #if !defi

计算机图形学(二)输出图元_10_多边形填充区_1_多边形分类和识别

多边形填充区 一个多边形(polygon)在数学上定义为由三个或者更多称为顶点的坐标位置描述的平面图形,这些顶点由称为多边性的边(edge或者side)顺序连接.进一步来看,几何上要求多边形的边除了端点之外没有其他公共点.因此,根据定义,一个多边形在其单一平面上必须有其所有的顶点且边之间无交叉.多边形的例子有三角形.矩形.八边形和十六边形等.有时,任一有封闭折线边界的平面图形暗指一个多边形,而若其没有交叉边则称为标准多边形(( standard polygon)或简单多边形( simple po

计算机图形学 复习笔记

计算机图形学 复习笔记 (个人整理,仅做复习用 :D,转载注明出处:http://blog.csdn.net/hcbbt/article/details/42779341) 第一章 计算机图形学综述 研究内容 图形的概念:计算机图形学的研究对象 能在人的视觉系统中产生视觉印象的客观对象 包括自然景物.拍摄到的图片.用数学方法描述的图形等等 图形的要素 几何要素:刻画对象的轮廓.形状等 非几何要素:刻画对象的颜色.材质等 图形表示法 点阵表示 枚举出图形中所有的点,简称为图像. 参数表示 由图形的

[计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(一)

一.首先说明: 这是啥? —— 这是利用C#FORM写的一个用来演示计算机图形学中 ①Bresenham直线扫描算法(即:连点成线):②种子填充法(即:填充多边形):③扫描线填充法 有啥用? ——  无论是连点成线还是区域填充在高级编程中基本上都提供很高效的库函数来调用.这里拿出这些算法一方面有利于大家理解那些封装的函数底层是实现:另一方面是方便嵌入式TFT屏幕底层驱动开发时借鉴的. 是啥样? ——  如下面的操作,不言而喻. 二.进入正题: 2-1.直线的扫描转换 图形的扫描转换实质就是在光栅

计算机图形学(三种画线算法)

第二章:光栅图形学算法 1.光栅显示器:光栅扫描式图形显示器简称光栅显示器,是画点设备,可看作是一个点阵单元发生器,并可控制每个点阵单元的亮度 2.由来:随着光栅显示器的出现,为了在计算机上处理.显示图形,需要发展一套与之相适应的算法. 3.研究内容: 1>直线段的扫描转换算法 2>多边形的扫描转换与区域填充算法 3>裁剪算法 4>反走样算法 5>消隐算法 一.直线段的扫描转换算法 1.为了显示一条直线,就在光栅显示器上用离散的像素点逼近直线,所以我们就要知道这些像素点的坐标

【转载】计算机图形学框架

原文: 计算机图形学框架 应用 基本图形生成算法 图元光栅化标准 直线要直 图元终点要准 图元生成的亮度.色泽粗细要均匀 快速计算 直线光栅化算法 逐点比较法 数值微分法 中点Bresenham算法 圆的光栅化算法 简单方程产生圆弧 Bresenham算法产生圆弧 多边形填充 扫描线填充 宽图元 复制像素画宽图元 移动画笔画宽图元 3D数学基础 坐标系 向量 矩阵 空间集合运算 集合形体的表达 几何体之间的关系 图形变换 二维及三维图形几何变换 二维图形几何变换 平移变换 比例变换 旋转变换 错

计算机图形学名词解释

转自 http://blog.csdn.net/lwfcgz/article/details/39254743 3D三维(three dimension).客观世界中静止的物体都是三维的,在计算机图形学中常在一定的坐标系中用(x,y,z)坐标系列表示物体. 3D modeling3D建模.用三维坐标来描述物体的形状.在各种计算机图形应用领域中有不同的三维建模方法,用不同的算法来描述这些领域中的物体和对象. 3D transformation3D变换.在三维空间中把物体的三维坐标从一个位置变换至另