您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)如何使用MFC實(shí)現(xiàn)圖形學(xué)課程中中點(diǎn)圓算法,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
1.進(jìn)入資源視圖,新建對(duì)話框,編輯修改Caption或者ID屬性
右擊該對(duì)話框添加類 基類為 CDialog
命名為:MyCircleDialog
使用類向?qū)?選擇MyCircleDialog類,選 擇成員變量 添加變量 value類型 int型
m_radius 設(shè)置 變量取值范圍
m_circlex
m_circlex
2.添加菜單,設(shè)置ID 為 ID_MyCircleMenu 并通過類向?qū)砑酉⒂成浜瘮?shù)
選擇類名 C***View
查找ID ID_MyCircleMenu,映射 ONCOMMAND 消息
C***View
3.添加變量并在構(gòu)造函數(shù)中初始化
C***View.h
public: int m_vradius; int m_vcirclex; int m_vcircley;
C***View.cpp
m_vradius = 0; m_vcirclex = 0; m_vcircley = 0;
添加 MyCircleDialog 頭文件
#include "MyCircleDialog.h"
4.在消息處理程序中添加與dialog交互 獲取 輸入數(shù)據(jù)的代碼
// CMFCCircleDialogDemoView 消息處理程序 void CMFCCircleDialogDemoView::OnMycirclemenu() { // TODO: 在此添加命令處理程序代碼 MyCircleDialog dlg; //定義一個(gè)對(duì)話框?qū)ο? if(dlg.DoModal() == IDOK) //顯示對(duì)話框 { m_vradius = dlg.m_radius; m_vcirclex = dlg.m_circleX; m_vcircley = dlg.m_circleY; //接收并存儲(chǔ)編輯框數(shù)據(jù) Invalidate(); //刷新視圖 } }
// CMFCTestView 繪制
5.在OnDraw中 添加 繪圖 代碼(取消CDC*參數(shù)注釋,使用所有設(shè)備環(huán)境基類CDC畫圖,
也可以定義使用 其他設(shè)備環(huán)境類如CClientDC等)
void CMFCCircleDialogDemoView::OnDraw(CDC* pDC) { CMFCCircleDialogDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此處為本機(jī)數(shù)據(jù)添加繪制代碼 /*確定圓心,畫出直角坐標(biāo)系*/ CRect rect; GetWindowRect(rect); int center_x = rect.Width()/2; int center_y = rect.Height()/2; CPen myPen; //創(chuàng)建畫筆 myPen.CreateStockObject(BLACK_PEN); //設(shè)置畫筆屬性 pDC->SelectObject(&myPen); //綁定畫筆句柄 pDC->MoveTo(center_x,0); pDC->LineTo(center_x, rect.Height()); pDC->MoveTo(0,center_y); pDC->LineTo(rect.Width(),center_y); /*********************繪制圓****************/ //邏輯圓心坐標(biāo) /* int m_vradius = 50; int m_vcirclex = -70; int m_vcircley = 100; */ //轉(zhuǎn)化為畫布中圓心坐標(biāo) center_x = center_x + m_vcirclex; center_y = center_y - m_vcircley; pDC->SetPixel(center_x,center_y+m_vradius,RGB(125,125,125));//繪制圓心的點(diǎn) pDC->Ellipse(center_x-3,center_y-3,center_x+3,center_y+3); //畫個(gè)小圓,確定圓心位置 int p=5/4-m_vradius; //鍵值的初始值 int x=0; int y=m_vradius; //使用中點(diǎn)圓算法畫圓 while(x<y){ x++; if(p<0){ p=p+2*x+3; pDC->SetPixel(center_x+x,center_y+y,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x+x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y+y,RGB(125,125,125)); //以對(duì)稱的方式完成圓的繪制 } else{ y--; p=p+2*x+3-2*y-2; pDC->SetPixel(center_x+x,center_y+y,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x+y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x+x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y-y,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y-x,RGB(125,125,125)); pDC->SetPixel(center_x-y,center_y+x,RGB(125,125,125)); pDC->SetPixel(center_x-x,center_y+y,RGB(125,125,125)); //以對(duì)稱的方式完成圓的繪制 } Sleep(20); } }
關(guān)于“如何使用MFC實(shí)現(xiàn)圖形學(xué)課程中中點(diǎn)圓算法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。