資源描述:
《直線中點bresenham算法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、學生:學號:班級:網(wǎng)絡實驗時間: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,否則結(jié)束。二:偽代碼voidCTestV
2、iew::myDrawLine(){CClientDCdc(this);dc.MoveTo(20,30);dc.LineTo(200,300);}voidCTestView::OnMydrawline(){//TODO:AddyourcommandhandlercodeheremyDrawLine();}三:截圖實驗:多邊形有效邊表填充算法一:原理多邊形的有效邊表填充算法的基本原理是按照掃描線從小到大的移動順序,計算當前掃描線與多邊形各邊的交點,然后把這些交點按x值遞減的順序進行排序、配對,以確定填充區(qū)間,然后用指定顏色點亮填
3、充區(qū)間內(nèi)的所有像素,即完成填充工作。1、定義多邊形2、初始化桶3、建立邊表4、多邊形填充1)對每一條掃描線,將該掃描線上的邊結(jié)點插入到臨時AET表中,HeadE.2)對臨時AET表排序,按照x遞增的順序存放。3)根據(jù)AET表中邊表結(jié)點的ymax拋棄掃描完的邊結(jié)點,即ymax>=scanline4)掃描AET表,填充掃描線和多邊形相交的區(qū)間。二:偽代碼classCscanfillView:publicCView{protected://僅從序列化創(chuàng)建CscanfillView();DECLARE_DYNCREATE(Cscanf
4、illView)//屬性public:CscanfillDoc*GetDocument()const;//操作public:voidPolygonFill();//上閉下開填充多邊形voidCreatBucket();//建立桶節(jié)點voidEt();//構(gòu)造邊表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);//實現(xiàn)public:virtual~CscanfillView();#ifdef_DEBUGvirtualvoidAssertValid()const;virtualvoidDump(
6、CDumpContext&dc)const;#endifprotected:COLORREFGetColor;//調(diào)色板CPointPoint[7];//定義多邊形Bucket*HeadB,*CurrentB;//桶的頭結(jié)點和當前節(jié)點AETE[Number],*HeadE,*CurrentE,*T1,*T2;//有效邊表的節(jié)點//生成的消息映射函數(shù)protected:DECLARE_MESSAGE_MAP()public:afx_msgvoidOnMenuAET();};#ifndef_DEBUG//scanfillView.
7、cpp中的調(diào)試版本inlineCscanfillDoc*CscanfillView::GetDocument()const{returnreinterpret_cast(m_pDocument);}#endif三:截圖實驗:梁友棟-Barsky直線裁剪算法一:原理梁友棟-Barsky算法進行線段裁剪的步驟(1)輸入直線段的兩端點坐標以及窗口的四條邊界坐標。(2)若Δx=0則p1=p2=0。進一步判斷是否滿足q1<0或q2<0若滿足則該直線段不在窗口內(nèi)轉(zhuǎn)(7)。否則滿足q1>0且q2>0
8、則進一步計算u1和u2。轉(zhuǎn)(5)。(3)若Δy=0則p3=p4=0。進一步判斷是否滿足q3<0或q4<0若滿足則該直線段不在窗口內(nèi)轉(zhuǎn)(7)。否則滿足q1>0且q2>0則進一步計算u1和u2。轉(zhuǎn)(5)。(4)若上述兩條均不滿足,則有pk≠0(k=1,2,3,4)。此