Bresenham实验.docx
- 文档编号:2328788
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:14
- 大小:391.79KB
Bresenham实验.docx
《Bresenham实验.docx》由会员分享,可在线阅读,更多相关《Bresenham实验.docx(14页珍藏版)》请在冰豆网上搜索。
Bresenham实验
实验报告
课程名称计算机图形图像处理基础学年2015-2016学期1/2
课程类别专业必修限选任选实践实验时间2015年9月21日
实验名称
Breasenham算法
实验目的和要求
(1)掌握中点Breasenham绘制直线的原理;
(2)设计中点Breasenham算法;
(3)掌握八分法中点Breasenham算法绘制圆的原理;
(4)设计八分法绘制圆的中点Breasenham算法。
实验软硬件要求
PC机,Vc++6.0
实验内容、方法和步骤(可附页)
见附页
实验结果(可附页)
见附页
小结通过本实验掌握了中点Breasenham绘制直线的原理,及八分法中点Breasenham算法绘制圆的原理,熟练掌握了MFC工程的创建。
评定成绩:
批阅教师:
年月日
附页
实验内容、方法和步骤
一、使用中点Breasenham算法绘制斜率为0<=k<=1的直线
(1)新建一个MFC工程test
(2)新建对话框IDD_DIALOG1
(3)双击对话框IDD_DIALOG1新建一个类InputDlg
(4)对对话框IDD_DIALOG进行布局
(5)ctr+w打开MFCClassWizard,对编辑框进行绑定
(6)编写直线中点Breasenham函数
(7)编写菜单函数
(8)调试运行及结果截图:
二、使用中点Breasenham算法绘制圆心位于屏幕客户区中心的圆
(1)在同一工程test的基础上,在菜单项添加“圆中点Breasenham”,并设置相应操作对话框IDD_DIALOG2,为对话框添加新类InputDlg2
(2)编写函数得到客户区的最大横坐标
(3)编写圆中点Breasenham算法函数
(4)编写八分法画圆子函数
(5)编写菜单函数
(6)运行调试及结果截图:
程序主要源代码:
testView.cpp
#include"stdafx.h"
#include"test.h"
#include"testDoc.h"
#include"testView.h"
#defineROUND(a)int(a+0.5)//四舍五入
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
voidCTestView:
:
Mbline()
{
CClientDCdc(this);
COLORREFrgb=RGB(0,0,255);
doublex,y,d,k;
x=x0;y=y0;k=(y1-y0)/(x1-x0);d=0.5-k;
for(x=x0;x<=x1;x++)
{
dc.SetPixel(ROUND(x),ROUND(y),rgb);
if(d<0)
{
y++;
d+=1-k;
}
else
d-=k;
}
}
voidCTestView:
:
OnOnMENUMbLine()
{
//TODO:
Addyourcommandhandlercodehere
InputDlgdlg;
if(dlg.DoModal()==IDOK)
{
x0=dlg.m_x0;
y0=dlg.m_y0;
x1=dlg.m_x1;
y1=dlg.m_y1;
}
AfxGetMainWnd()->SetWindowText("基本图形扫描转换:
Mbline");
RedrawWindow();
Mbline();
}
voidCTestView:
:
GetMaxX()
{
CRectRect;
GetClientRect(&Rect);
MaxX=Rect.right;
}
voidCTestView:
:
GetMaxY()
{
CRectRect;
GetClientRect(&Rect);
MaxY=Rect.bottom;
}
voidCTestView:
:
Mbcircle()
{
doublex,y,d;
d=1.25-R;x=0;y=R;
for(x=0;x CirclePoint(x,y); if(d<0) d+=2*x+3; else { d+=2*(x-y)+5; y--; } } } voidCTestView: : CirclePoint(doublex,doubley) { CClientDCdc(this); COLORREFrgb=RGB(0,0,255); dc.SetPixel(ROUND(x)+MaxX/2,ROUND(y)+MaxY/2,rgb); dc.SetPixel(ROUND(y)+MaxX/2,ROUND(x)+MaxY/2,rgb); dc.SetPixel(-ROUND(y)+MaxX/2,ROUND(x)+MaxY/2,rgb); dc.SetPixel(ROUND(x)+MaxX/2,-ROUND(y)+MaxY/2,rgb); dc.SetPixel(-ROUND(x)+MaxX/2,-ROUND(y)+MaxY/2,rgb); dc.SetPixel(-ROUND(y)+MaxX/2,-ROUND(x)+MaxY/2,rgb); dc.SetPixel(ROUND(y)+MaxX/2,-ROUND(x)+MaxY/2,rgb); dc.SetPixel(-ROUND(x)+MaxX/2,ROUND(y)+MaxY/2,rgb); } voidCTestView: : OnMENUMbcircle() { //TODO: Addyourcommandhandlercodehere InputDlg2dlg; if(dlg.DoModal()==IDOK) { R=dlg.m_R; } AfxGetMainWnd()->SetWindowText("基本图形扫描转换: Mbcircle"); RedrawWindow(); GetMaxX();GetMaxY(); Mbcircle(); } testView.h #include"InputDlg.h" #include"InputDlg2.h" //Operations public: voidGetMaxX(); voidGetMaxY(); voidCirclePoint(doublex,doubley); voidMbcircle(); voidMbline(); //Overrides protected: virtualBOOLOnPreparePrinting(CPrintInfo*pInfo); virtualvoidOnBeginPrinting(CDC*pDC,CPrintInfo*pInfo); virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo); //}}AFX_VIRTUAL //Implementation public: virtual~CTestView(); #ifdef_DEBUG virtualvoidAssertValid()const; virtualvoidDump(CDumpContext&dc)const; #endif protected: intMaxX,MaxY; doubleR; doublex0,y0,x1,y1; //Generatedmessagemapfunctions protected: //{{AFX_MSG(CTestView) afx_msgvoidOnOnMENUMbLine(); afx_msgvoidOnMENUMbcircle(); //}}AFX_MSG afx_msgvoidOnMENUMbline(); DECLARE_MESSAGE_MAP() }; #ifndef_DEBUG//debugversionintestView.cpp inlineCTestDoc*CTestView: : GetDocument() {return(CTestDoc*)m_pDocument;} #endif ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} //MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline. #endif//! defined(AFX_TESTVIEW_H__EBE0BB3F_752C_4C87_B651_B8C931FB3267__INCLUDED_)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Bresenham 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)