计算机图形学的多边形扫描转换和区域填充

一、多边形扫描转换
1.多变形的两种表示方式:
(1)顶点表示:存储多边形的顶点坐标
在这里插入图片描述
(2)点阵表示:存储多边形内的像素坐标
在这里插入图片描述
多边形扫描转换也称为多边形光栅化:
在这里插入图片描述
2.多边形光栅化的方法
(1)逐点判断法
逐个像素判断是否位于多边形内部。
判断方法:射线法
注意一些顶点在多边形的边上的特殊情况:
在这里插入图片描述
即当扫描线与边相交于边的上端点时,上端点不作为交点;当扫描线与边相交于边的下端点时,下端点作为交点。处理时,对于上端点,不再与扫描线进行求交运算。
逐点判断算法分析:
在这里插入图片描述
(2)扫描线算法:基于像素连贯性
像素的连贯性分为三种:
区域连贯性
两条扫描线间被分为多个梯形,每个梯形内的像素性质相同,同属于多边形内或多边形外,所以对于多边形内部的点进行一次判断即可,不必逐点判断。
在这里插入图片描述
扫描线连贯性
多边形与扫描线的交点的数目一定是偶数,交点序列为1,2,3,4,…,交点间的线段分为多边形内部和多边形外部两类线段且相间排列,如果线段(区间)内某点属于多边形内(外),那么区间内所有的点均属于多边形内(外)。
在这里插入图片描述
边的连贯性
多边形的直线解析式为y=k*x+b,y=yi、y=y(i+1)是两条扫描线,可得x1=yi/k-b/k,x(i+1)=y(i+1)/k-b/k=(yi+1)/k-b/k=yi/k-b/k+1/k=xi+1/k
在这里插入图片描述
在这里插入图片描述
所以,求出了扫描线yi与多边形边p1p2的交点A的坐标,即可快速计算出B的坐标。
在这里插入图片描述
例如:
在这里插入图片描述
进一步提高效率:
(1)扫描线不需要与多边形所有的边求交点,用一个AEL活性边链表记录相交的边以及交点。
(2)边按照下端点分组放在边表ET中,从下到上扫描时,第一次与某边相交时,交点为下端点,把这条边从边表中取出来放到活性边链表中并将边的端点作为交点作为端点记录在链表中。
在这里插入图片描述
(3)快速计算扫描线与有效边的交点
某条边与扫描线的第一个交点是它的下端点,按照边的连贯性,只要进行增量计算(如下图)就可以得出与下一条扫描线的交点坐标,这样借助于一些数据结构ET以及AEL就可以更快速地完成处理。
在这里插入图片描述
算法实现:
定义边的结构体:
在这里插入图片描述
数据结构--边表:边表是按照边的下端点的纵坐标y对非水平边进行分类的指针数组,水平边不需要处理,不加入边表。
在这里插入图片描述
边表的作用是可以快速确定与当前扫描线相交的边集合。边表初始各元素为空,根据多边形顶点序列建立边结点,依次插入到对应链表中即可。
AEL:与当前扫描线相交的边为活动边,活动边链表AEL,活动表按照与扫描线交点x递增的顺序存放,所以AEL记录了扫描线与多边形的边的交点序列。AEL随着扫描线的移动动态更新。
在这里插入图片描述
二、区域填充(种子填充算法)
在这里插入图片描述
种子填充算法只能对连通区域进行填充
在这里插入图片描述
种子填充算法:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2942de78ca094578814e3ec768d84d08.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5b6u5oms5Zi06KeS,size_20,color_FF在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值