计算机图形学-有效边表填充算法实验报告(共11页).doc
《计算机图形学-有效边表填充算法实验报告(共11页).doc》由会员分享,可在线阅读,更多相关《计算机图形学-有效边表填充算法实验报告(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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)。在 1024768 的显示分辩率下,将多边形顶点放大为 P0(500,400) ,P1(350,600) ,P2(250,350),P3(350,50), P4(500,250), P5(600,50), P6(8
2、00,450)。请使用有效边表算法填充该多边形。 图1示例多边形图2 屏幕显示多边形3.算法设计:(1)建立AET和BUCKET类;(2)初始化桶,并在建立桶结点时为其表示的扫描线初始化为带头结点的链表;(3)对每个桶结点进行循环,将桶内每个结点的边表合并为有效边表,并进行有效边表循环;(4)按照扫描线从小到大的移动顺序,计算当前扫描线与多边形各边的交点,然后把这些交点按X值递增的顺序进行排序,配对,以确定填充区间;(5)用指定颜色点亮填充区间内的所有像素,即完成填充工作。4.源程序:1)/AET.hclass AET public:AET();virtual AET();double x;i
3、nt yMax;double k;/代替1/kAET *next;/AET.cppAET:AET()AET:AET()2) /Bucket.h#include AET.hclass Bucket public:Bucket();virtual Bucket();int ScanLine;AET *p;/桶上的边表指针Bucket *next;/ Bucket.cppBucket:Bucket()Bucket:Bucket()3)/TestView.h#include AET.h/包含有效边表类#include Bucket.h/包含桶类#define Number 7/N为闭合多边形顶点数,顶
4、点存放在整型二维数组PointN中class CTestView : public CView。public:void PolygonFill();/上闭下开填充多边形void CreatBucket();/建立桶结点桶void Et();/构造边表void AddEdge(AET *);/将边插入AET表void EdgeOrder();/对AET表进行排序 。protected:COLORREF GetColor;/调色板CPoint Point7;/定义多边形Bucket *HeadB,*CurrentB;/桶的头结点和当前结点AET ENumber,*HeadE,*CurrentE,*
5、T1,*T2;/有效边表的结点(4) TestView.cpp#define ROUND(a) int(a+0.5) /四舍五入CTestView:CTestView()/设置多边形的7个顶点Point0=CPoint(550,400);/P0Point1=CPoint(350,600);/P1Point2=CPoint(250,350);/P2Point3=CPoint(350,50);/P3Point4=CPoint(500,250);/P4Point5=CPoint(600,50);/P5Point6=CPoint(800,450);/P6void CTestView:OnDraw(CD
6、C* 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,30,P3);pDC-TextOut(490,220,P4);pDC-TextOut(600,30,P5);pDC-TextOut(805,450,P6); void CTestView:OnMenuAET() /菜单函数AfxGe
7、tMainWnd()-SetWindowText(多边形有效边表填充算法);/显示标题CColorDialog ccd(GetColor);if(ccd.DoModal()=IDOK)/调用调色板选取前景色GetColor=ccd.GetColor();RedrawWindow();/刷新屏幕CreatBucket();/初始化桶Et();/建立边表PolygonFill();/多边形填充void CTestView:CreatBucket()/初始化桶int ScanMin,ScanMax;/确定扫描线的最小值和最大值ScanMax=ScanMin=Point0.y;for(int i=1;
8、iNumber;i+)if(Pointi.yScanMax)ScanMax=Pointi.y;/扫描线的最大值for(i=ScanMin;iScanLine=ScanMin;CurrentB-p=NULL;/没有连接边链表CurrentB-next=NULL;else/建立桶的其它结点CurrentB-next=new Bucket;/新建一个桶结点CurrentB=CurrentB-next;/使CurrentB指向新建的桶结点CurrentB-ScanLine=i;CurrentB-p=NULL;/没有连接边链表CurrentB-next=NULL;void CTestView:Et()/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 有效 填充 算法 实验 报告 11
限制150内