- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二 有效边表填充算法
1.实验目的:
设计有效边表结点和边表结点数据结构
设计有效边表填充算法
编程实现有效边表填充算法
2.实验描述:
下图 1 所示多边形覆盖了 12 条扫描线,共有 7 个顶点和 7 条边。7 个顶点分别为:P0(7,8) ,P1(3,12) ,P2(1,7) ,P3(3,1), P4(6,5), P5(8,1), P6(12,9)。在 1024×768 的显示分辩率下,将多边形顶点放大为 P0(500,400) ,P1(350,600) ,P2(250,350),P3(350,50), P4(500,250), P5(600,50), P6(800,450)。请使用有效边表算法填充该多边形。
图1示例多边形
图2 屏幕显示多边形
3.算法设计:
1.根据多边形顶点坐标值,计算扫描线的最大值ScanMax和最小值ScanMin。
2.用多边形覆盖的扫描线动态建立桶结点。
3.循环多边形的所有顶点,根据边的终点y 值比起点y值高或边的终点y值比起点y值低两种情况(边的终点y值和起点y值相等的情况属于扫描线,不予考虑),计算每条边的yMin。在桶中寻找与该yMin 相应的桶结点,计算该边表的x|yMin、yMax、k(代表斜率倒数1/k),并依次连接该边表结点到桶结点。
4.对每个桶结点连接的边表,根据x|yMin值的大小进行排序,若 x|yMin相等,则按照k由小到大排序。
5.对每个桶结点进行循环,将桶内每个结点的边表合并为有效边表,并进行有效边表循环。
6.从有效边表中取出相邻两条边的交点对进行填充。填充时设置一个逻辑变量In(初始值为假),每访问一个结点,把In值取反一次,若In为真,则把从当前结点的x值开始到下一结点的x-1值结束的区间用指定颜色填充。(左闭右开)
7.循环下一桶结点,按照 xi+1=xi+k(k的值为1/k)修改有效边表,同时合并桶结点内的新边表,形成新的有效边表。
8.如果桶结点的扫描线值大于等于有效边表中某个结点的yMax值,则放弃该有效边表。
9.当桶结点不为空则转⑸,否则删除桶结点和边结点的头结点,算法结束。
4.源程序:
1)//AET.h和AET..cpp
class AET
{
}
2)//Bucket.h和Bucket.cpp
class Bucket
{
}
3) // TestView.h
#include AET.h//包含有效边表类
#include Bucket.h//包含桶类
#define Number 7//N为闭合多边形顶点数,顶点存放在整型二维数组Point[N]中
class CTestView : public CView
{
。。。。。。。。。
public:
void PolygonFill();//上闭下开填充多边形
void CreatBucket();//建立桶结点桶
void Et();//构造边表
void AddEdge(AET *);//将边插入AET表
void EdgeOrder();//对AET表进行排序
。。。。。。。。。。
protected:
COLORREF GetColor;//调色板
CPoint Point[7];//定义多边形
Bucket *HeadB,*CurrentB;//桶的头结点和当前结点
AET E[Number],*HeadE,*CurrentE,*T1,*T2;//有效边表的结点
4)// TestView.cpp
CTestView::CTestView()
{
//设置多边形的7个顶点
Point[0]=CPoint(550,400);//P0
Point[1]=CPoint(350,600);//P1
Point[2]=CPoint(250,350);//P2
Point[3]=CPoint(350,50);//P3
Point[4]=CPoint(500,250);//P4
Point[5]=CPoint(600,50);//P5
Point[6]=CPoint(800,450);//P6
}
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC-Polygon(Point,7);//绘制多边形
//输出多边形的顶点编号
pDC-TextOut(550,410,P0);
pDC-TextOut(350,600,P1);
pDC-TextOut(230,340,P2);
pDC-TextOut(350,3
您可能关注的文档
最近下载
- 汤显祖和牡丹亭.pptx VIP
- 2024年春江苏开放大学Android基础050324第三次形考作业.doc VIP
- 冠状动脉CT血管成像在慢性冠脉综合征的风险分层和诊疗中应用的专家共识.pptx
- 上海市浦东新区华东师范大学第二附属中学2024届高一数学第一学期期末考试试题含解析.doc VIP
- 中级商务汉语 全套课件.PPT VIP
- 中国式现代化党课学习主题教育.pptx VIP
- 行政事业单位审计存在的常见问题与对策.pptx VIP
- 营养科患者营养评估.pptx VIP
- IPC-A-610E-2010 国外国际标准.pdf
- 2024-2025学年高中信息技术(信息科技)必修1 数据与计算沪科版(2019)教学设计合集.docx
原创力文档


文档评论(0)