slide1
Download
Skip this Video
Download Presentation
多边形填充

Loading in 2 Seconds...

play fullscreen
1 / 20

多边形填充 - PowerPoint PPT Presentation


  • 164 Views
  • Uploaded on

多边形填充. 掌握多边形填充中的 AET 算法 在 VC++ 中实现 AET 算法. AET 算法相关知识. 从下面两个方面出发,修改 X 扫描线算法 扫描线的相关性 :某条扫描线上相邻的象素,几乎都具有同样的内外性质,这种性质只有遇到多边形边线与该扫描线的交点时才会发生改变。. AET 算法相关知识. 从下面两个方面出发,修改 X 扫描线算法 边的相关性 :对同一条边,前一条扫描线 y i 与该边的交点为 x i ,而后一条扫描线 y i+1 =y i +1 与该边的交点则为 x i+1 =x i +1/m ,利用这种相关性可以省去大量的求交运算。.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 多边形填充' - raleigh


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
多边形填充
  • 掌握多边形填充中的AET算法
  • 在VC++中实现AET算法
slide3
AET算法相关知识
  • 从下面两个方面出发,修改X扫描线算法
    • 扫描线的相关性:某条扫描线上相邻的象素,几乎都具有同样的内外性质,这种性质只有遇到多边形边线与该扫描线的交点时才会发生改变。
slide4
AET算法相关知识
  • 从下面两个方面出发,修改X扫描线算法
    • 边的相关性:对同一条边,前一条扫描线yi与该边的交点为xi,而后一条扫描线yi+1=yi+1与该边的交点则为xi+1=xi+1/m,利用这种相关性可以省去大量的求交运算。
slide5
AET算法相关知识
  • 边相关扫描线填充算法的实现需要建立两个表:边表(ET)和活动边表(AET)
slide6
AET算法相关知识
  • 边表(ET:Edge Table)
    • 用来对除水平边外的所有边进行登记,来建立边的记录。边的记录定义为
      • 某边的最大y值(ymax)。注意要进行奇异点处理:对于非极值点应该ymax=ymax-1。
      • 某边的最小的y对应的x值。
      • 斜率的倒数
      • next
slide7
AET算法相关知识
  • 活动边表(AET:Active Edge Table)
    • 只与当前扫描线相交的边记录链表,称之为活动边表。
slide8
AET算法相关知识
  • 算法的基本实现步骤
    • 根据给出的多边形顶点坐标,建立ET表;求出顶点坐标中最大y值ymax和最小y值ymin
      • 在做奇异点处理时,当该边最大y值对应的顶点为非极值点时,边记录的第一项:ymax=ymax-1。
slide9
AET算法相关知识
  • 算法的基本实现步骤
slide10
AET算法相关知识
  • 算法的基本实现步骤
    • 接着建立AET表。AET表的建立过程就是有效地进行填充的操作,在这个期间不断地做以下工作:
      • 合并ET表
      • x递增排序
      • 实施填充
      • 删除ymax=yj的边
      • 修改边记录xi=xi+1/m
      • yj+1进入下一轮循环。
slide11
AET算法相关知识
  • 算法的基本实现
    • 根据多边形顶点坐标,建立ET 表。
    • AET表初始化,每个桶置空。
    • for(y=ymin;y<= ymax;y++)
      • {  合并当前扫描线y的ET表;
      • 将y桶中每个记录按x项升序排列
      • 在当前y值下,将两两记录的x值之间的象素进行填充;
      • 删除y=ymax的边记录
      • 修改边记录x=x+1/m;}
slide12

Typedef struct tEdge

{ int yMax;

float x,dx;

struct tEdge *next;}Edge

//边表edges,活动边表actEdge,pts存放多边形顶点序列

//win_height为扫描线数目,cnt为顶点数目

int win_height,int cnt;

Edge *edges[win_height],* actEdge;

CPoint *pts;

AET算法相关知识
  • AET算法的数据结构
slide13
AET算法相关知识
  • 实现
    • 定义类 CUPolygon,数据成员记录顶点序列的数组,边表和活动边表,顶点数目,扫描线数目,最大扫描线数
    • 为该类设计一个带参数的构造函数,用于初始化相关变量的值
    • 该类包含主要成员函数
      • Scanfill,调用该函数实现填充
      • buildEdgeList调用函数建立边表
slide14
AET算法相关知识
  • 实现
    • 该类包含成员函数
      • buildActiveList:产生活动边表
      • Fillscan:实现两端点间线段填充
      • UpdateActiveList:更新活动边表
      • resortActiveList:排序活动边表
slide15

1 从键盘接收多边形顶点数和顶点坐标等信息

2 定义CUPolygon类对象polygon,并在构造函数中完成对

相关变量初始化(pts,cnt,win_height等)

3 polygon.scanFill()函数,完成填充并显示的过程

AET算法相关知识
  • 程序结构
slide16

scanFill多边形填充函数主要完成以下工作:

产生ET表中的桶

调用buillEdgeList建立边表

对每一条扫描线,重复以下工作:

buildActiveList建立活动边表

使用fillscan填充(配对,填充)

使用updateActiveList更新活动边表结点

resortActiveList排序AET表结点

AET算法相关知识
  • 程序结构
slide17
实验要求
  • 参照上述知识,完成实验
  • 请打开工程polygon.dsw
  • 工程的polygon.cpp为主函数main所在文件,请实现多边形顶点信息的输入,并在该文件中实现多边形填充函数的调用
  • 工程的Upolygon.cpp和Upolygon.h为类CUpolygon的类定义文件和成员函数实现文件,请将有关代码书写在这里
slide18
实验要求
  • 阅读参考程序1.txt的有关内容,在读懂的基础上将相关函数代码移植到Upolygon.cpp和Upolygon.h文件中
  • 程序执行结果以及相关信息报告,请运行test.exe文件,并输入测试多边形数据( 6,7) ( 8,5) ( 6,1) (2,3) (2,6),查看程序输出结果
slide19

除了上述提到的函数,在程序中可能用到的函数有除了上述提到的函数,在程序中可能用到的函数有

增删链表结点的函数

建立链表结点的函数

判断奇异点的函数等

AET算法相关知识
  • 程序结构
slide20

对于奇异点的判断,主体思想是:

考察的边为:当前边的ymax、与当前边ymax端点相邻的边的ymin比较

AET算法相关知识
  • 程序结构
ad