欢迎来到天天文库
浏览记录
ID:11827551
大小:168.00 KB
页数:0页
时间:2018-07-14
《直线中点bresenham算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、学生:学号:班级:网络实验时间:2012年12月19日报告时间:2012年12月20日系别:计算机系学院:电气与信息工程学院实验:直线中点Bresenham算法一:原理1、输入直线的两端点p0(x0,y0)和p1(x1,y1)。2、计算初始值△x,△y,d=△x-2△y,x=x0,y=y0。3、绘制点(x,y)判断d的符号:若d<0,则(x,y)更新为(x+1,y+1),d更新为d+2△x-2△y;否则(x,y)更新为(x+1,y),d更新为d-2△y。4、当直线没有画完时,重复步骤3,否则结束。二:伪代码voidCTestV
2、iew::myDrawLine(){CClientDCdc(this);dc.MoveTo(20,30);dc.LineTo(200,300);}voidCTestView::OnMydrawline(){//TODO:AddyourcommandhandlercodeheremyDrawLine();}三:截图实验:多边形有效边表填充算法一:原理多边形的有效边表填充算法的基本原理是按照扫描线从小到大的移动顺序,计算当前扫描线与多边形各边的交点,然后把这些交点按x值递减的顺序进行排序、配对,以确定填充区间,然后用指定颜色点亮填
3、充区间内的所有像素,即完成填充工作。1、定义多边形2、初始化桶3、建立边表4、多边形填充1)对每一条扫描线,将该扫描线上的边结点插入到临时AET表中,HeadE.2)对临时AET表排序,按照x递增的顺序存放。3)根据AET表中边表结点的ymax抛弃扫描完的边结点,即ymax>=scanline4)扫描AET表,填充扫描线和多边形相交的区间。二:伪代码classCscanfillView:publicCView{protected://仅从序列化创建CscanfillView();DECLARE_DYNCREATE(Cscanf
4、illView)//属性public:CscanfillDoc*GetDocument()const;//操作public:voidPolygonFill();//上闭下开填充多边形voidCreatBucket();//建立桶节点voidEt();//构造边表voidAddEdge(AET*);//将边插入AET表voidEdgeOrder();//对AET表进行排序//重写public:virtualvoidOnDraw(CDC*pDC);//重写以绘制该视图virtualBOOLPreCreateWindow(CREAT
5、ESTRUCT&cs);protected:virtualBOOLOnPreparePrinting(CPrintInfo*pInfo);virtualvoidOnBeginPrinting(CDC*pDC,CPrintInfo*pInfo);virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo);//实现public:virtual~CscanfillView();#ifdef_DEBUGvirtualvoidAssertValid()const;virtualvoidDump(
6、CDumpContext&dc)const;#endifprotected:COLORREFGetColor;//调色板CPointPoint[7];//定义多边形Bucket*HeadB,*CurrentB;//桶的头结点和当前节点AETE[Number],*HeadE,*CurrentE,*T1,*T2;//有效边表的节点//生成的消息映射函数protected:DECLARE_MESSAGE_MAP()public:afx_msgvoidOnMenuAET();};#ifndef_DEBUG//scanfillView.
7、cpp中的调试版本inlineCscanfillDoc*CscanfillView::GetDocument()const{returnreinterpret_cast(m_pDocument);}#endif三:截图实验:梁友栋-Barsky直线裁剪算法一:原理梁友栋-Barsky算法进行线段裁剪的步骤(1)输入直线段的两端点坐标以及窗口的四条边界坐标。(2)若Δx=0则p1=p2=0。进一步判断是否满足q1<0或q2<0若满足则该直线段不在窗口内转(7)。否则满足q1>0且q2>0
8、则进一步计算u1和u2。转(5)。(3)若Δy=0则p3=p4=0。进一步判断是否满足q3<0或q4<0若满足则该直线段不在窗口内转(7)。否则满足q1>0且q2>0则进一步计算u1和u2。转(5)。(4)若上述两条均不满足,则有pk≠0(k=1,2,3,4)。此
此文档下载收益归作者所有