资源描述:
《实验二有效边表填充算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验二有效边表填充算法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)。在1024X768的显示分辩率下,将多边形顶点放大为P0(500,400),P1(350,600),P2(250,350),P3(350,50),P4(500,250),P5(600,50),P6(80
2、0,450)。请使用有效边表算法填充该多边形。图1示例多边形p3P5Pl图2屏幕显示多边形1•算法设计:2.源程序:1)〃AET・h和AET・・cppclassAET{}2)//Bucket.h和Bucket.cppclassBucket{}3)//TestView.hinclude”AET.h"〃包含有效边表类include”Bucket.h”〃包含桶类#defineNumber7//N为闭合多边形顶点数,顶点存放在整型二维数组Point[N冲classCTestView:publicCViewpublic:vo
3、idPolygonFill();//±闭下开填充多边形voidCreatBucket();//建立桶结点桶voidEt();〃构造边表voidAddEdge(AET*);//将边插入AET表voidEdgeOrder();//7^AET表进行排序protected:COLORREFGetColor;//调色板CPointPoint⑺;〃定义多边形Bucket*HeadB,*CurrentB;//ffi的头结点和当前结点AETE[Number],*HeadE,*CuiTentE,*Tl,*T2;〃有效边表的结点1)/
4、/TestView.cppCTestView::CTestView(){〃设置多边形的7个顶点Point[0]=CPoint(550,400);//P0Point[l]=CPoint(350,600);//PlPoint[2]=CPoint(250350);//P2Point[3]=CPoint(350^0);//P3Point[4]=CPoint(500,250);//P4Point[5]=CPoint(600,50);//P5Point[6]=CPoint(800,450);//P6}voidCTestView
5、::OnDraw(CDC*pDC){CTestDoc*pDoc=GetDocument();ASSERT.VALID(pDoc);pDC・>Polygon(Point,7);〃绘制多边形〃输出多边形的顶点编号pDC->TextOut(550,410,HP0M);pDC->TextOut(350,600,,,Pr,);pDC->TextOut(230,340,MP2H);pDC->TextOut(350,30,nP3H);pDC->TextOut(490,220,nP4M);pDC->TextOut(600,30,H
6、P5n);pDC->TextOut(805,450,HP6M);}voidCTestView::OnMenuAET()〃菜单函数{AfXGetMainWnd()->SetWindowText(H多边形有效边表填充算法”);//显示标题CColorDialogccd(GetColor);if(ccd.DoModal()==IDOK)//调用调色板选取前景色{GetColor=ccd.GetColor();}RedrawWindow();〃刷新屏幕CreatBucket();〃初始化桶Et();〃建立边表Polygon
7、FilK);//多边形填充}voidCTestView::CreatBucket()//^始化桶{}voidCTestView::Et()//构造边表{}voidCTestView::AddEdge(AET*NewEdge)//插入临时边表函数{}voidCTestView::EdgeOrder()//对边表进行排序函数{}voidCTestView::PolygonFill()//多边形填充函数5•运行结果:(屏幕截图)