2023年圖形學畫圓實驗報告_第1頁
2023年圖形學畫圓實驗報告_第2頁
2023年圖形學畫圓實驗報告_第3頁
2023年圖形學畫圓實驗報告_第4頁
2023年圖形學畫圓實驗報告_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

程序實現與上機實習(二)一、實驗目的編寫圓和橢圓的掃描轉換算法程序,驗證算法的對的性。二、實驗任務編寫中點畫圓法的掃描轉換程序,考慮原點在(x0,y0)處程序的改動;添加鼠標程序,實現交互式畫圓;編寫中點畫橢圓法的掃描轉換程序;添加鼠標程序,實現交互式畫橢圓;三、實驗內容1.編寫中點畫圓法的掃描轉換程序,考慮原點在(x0,y0)處程序的改動;分析:考慮圓心不再原點,設圓心坐標為(x0,y0)。通過平移坐標原點到圓心,則第二個8分圓上一點p(x,y),其原始坐標為x’=x+x0y’=y+y0即p’1(x0+x,y+y0)其它7個對稱點分別是:p’2(x0+y,y+x0),p’3(x0+y,y0-x),p’4(x0+x,y0-y),p’5(x0-x,y0-y),p’6(x0-y,y0-x),p’7(x0-y,y0+x),p’8(x0-x,y0+y)O(0,0)O(0,0)YX(x0,y0)R(x0+R,y0)p(x,y)X’Y’p’1(x0+x,y+y0)p’2(x0+y,y+x0)p’3(x0+y,y0-x)p’4(x0+x,y0-y))p’5(x0-x,y0-y)p’6(x0-y,y0-x)p’7(x0-y,y0+x)p’8(x0-x,y0+y)算法程序如下:MidpointCircle(intx0,inty0,intr,intcolor){intx,y;floatd;x=0;y=r;d=1.25-r;CirPot(x0,y0,x,y,color);while(x<=y){if(d<0){d+=2*x+3;x++;}else{d+=2*(x-y)+5;x++;y--;}CirPot(x0,y0,x,y,color);}/*while*/}/*MidpointCiecle*/intCirPot(intx0,inty0,intx,inty,intcolor){Setpixel((x0+x),(y0+y));Setpixel((x0+y),(y0+x));Setpixel((x0+y),(y0-x));Setpixel((x0+x),(y0-y));Setpixel((x0-x),(y0-y));Setpixel((x0-y),(y0-x));Setpixel((x0-y),(y0+x));Setpixel((x0-x),(y0+y));}程序實現環(huán)節(jié):建立MidPointCircle工程文獻;右擊CMidPointCircleView類,建立成員函數voidMidpointCircle(CDC*pDC,intx0,inty0,intr,COLORREFcolor)intCirPot(CDC*pDC,intx0,inty0,intx,inty,COLORREFcolor)(3)編寫成員函數代碼,程序如下:voidCMidPointCircleView::MidpointCircle(CDC*pDC,intx0,inty0,intr,COLORREFcolor){intx,y;floatd;x=0;y=r;d=1.25-r;CirPot(pDC,x0,y0,x,y,color);while(x<=y){if(d<0){d+=2*x+3;x++;}else{d+=2*(x-y)+5;x++;y--;}CirPot(pDC,x0,y0,x,y,color);}/*while*/}intCMidPointCircleView::CirPot(CDC*pDC,intx0,inty0,intx,inty,COLORREFcolor){pDC->SetPixel((x0+x),(y0+y),color);pDC->SetPixel((x0+y),(y0+x),color);pDC->SetPixel((x0+y),(y0-x),color);pDC->SetPixel((x0+x),(y0-y),color);pDC->SetPixel((x0-x),(y0-y),color);pDC->SetPixel((x0-y),(y0-x),color);pDC->SetPixel((x0-y),(y0+x),color);pDC->SetPixel((x0-x),(y0+y),color);return0;}(4)編寫OnDraw(CDC*pDC)函數,程序如下:voidCMidPointCircleView::OnDraw(CDC*pDC){?CMidPointCircleDoc*pDoc=GetDocument();?ASSERT_VALID(pDoc);?//TODO:adddrawcodefornativedat(yī)ahere MidpointCircle(pDC,100,100,10,RGB(255,0,0));MidpointCircle(pDC,500,300,60,RGB(255,255,0));}編譯、運營程序,查看結果。任務2:添加鼠標程序,實現交互式畫圓在任務1的基礎上,完畢下列環(huán)節(jié):(1)向視圖類中添加自定義的成員變量用鼠標右鍵單擊視圖類,選擇“AddMemberVariable…”,添加下面三個成員變量。proctected:intm_r;//半徑CPointm_bO;//圓心CPointm_bR;//圓上的點intm_ist;//圓心與圓周上點的區(qū)別,m_ist=0,表達鼠標左擊點為圓心,//m_ist=1,表達鼠標左擊點為圓周上的點(2)在視圖類CPP文獻的構造函數中初始化成員變量CMidPointCircleMouseView::CMidPointCircleMouseView(){ //TODO:addconstructioncodeherem_bO.x=0;m_bO.y=0;//圓心m_bR.x=0;m_bR.y=0;//圓上的點m_ist=0;//圓心與圓上的點區(qū)別m_r=0;//圓的半徑}(3)向視圖類中添加自定義的成員函數原型:public:intComputeRadius(CPointcenp,CPointardp);添加成員函數的程序代碼:intCMouseSpringView::ComputeRadius(CPointcenp,CPointardp){intdx=cenp.x-ardp.x;intdy=cenp.y-ardp.y;//sqrt()函數的調用,在頭文獻中加入#include"math.h"return(int)sqrt(dx*dx+dy*dy);}(4)向視圖類中添加兩個鼠標消息響應函數,并輸入鼠標解決程序代碼。具體操作方法與鼠標示例1方法相同。一個是OnLButtonDown()函數,另一個是OnMouseMove()函數。程序如下:voidCMidPointCircleMouseView::OnLButtonDown(UINTnFlags,CPointpoint){?//TODO:Addyourmessagehandlercodehereand/orcalldefault?CDC*pDC=GetDC();pDC->SelectStockObject(NULL_BRUSH); if(!m_ist)//繪制圓?{ m_bO=m_bR=point;//紀錄第一次單擊鼠標位置,定圓心??m_ist++; }?else {??m_bR=point;//記錄第二次單擊鼠標的位置,定圓周上的點 ?m_ist--;//為新繪圖作準備 m_r=ComputeRadius(m_bO,m_bR);? MidpointCircle(pDC,m_bO.x,m_bO.y,m_r,RGB(255,0,0)); }?ReleaseDC(pDC);//釋放設備環(huán)境?CView::OnLButtonDown(nFlags,point);}voidCMidPointCircleMouseView::OnMouseMove(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault?CDC*pDC=GetDC();?intnDrawmode=pDC->SetROP2(R2_NOT);//設立異或繪圖模式,并保存本來繪圖模式 pDC->SelectStockObject(NULL_BRUSH); if(m_ist==1)?{ CPointprePnt,curPnt;?prePnt=m_bR;//獲得鼠標所在的前一位置 ?curPnt=point; ?//繪制橡皮筋線m_r=ComputeRadius(m_bO,prePnt);MidpointCircle(pDC,m_bO.x,m_bO.y,m_r,RGB(255,0,0));//用異或模式反復畫圓,擦出所畫的圓?// DrawCircle(pDC,m_bO,prePnt);m

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論