




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
案例三第5章案例三第5章圆中点Bresenham算法圆中点Bresenham算法本案例知识要点掌握八分法中点Bresenham算法绘制圆的原理设计八分法绘制圆的中点Bresenham算法编写八分法绘制圆的CirclePoint(x,y)子函数编写绘制整圆的Mbcircle()子函数一、案例需求1.案例描述使用中点Bresenham算法绘制圆心位于屏幕客户区中心的圆。2.案例效果图案例输入对话框及效果如图3-1所示。(a)输入对话框(b)效果图3-1圆中点Bresenham算法效果图3.功能说明(1)要求使用对话框输入圆的半径。(2)圆的颜色为蓝色。三、算法设计输入圆的半径R。定义圆当前点坐标x,y、定义中点偏差判别式d、定义像素点颜色rgb。计算,x=0,y=R,rgb=RGB(0,0,255)。绘制点(x,y)及其在八分圆中的另外7个对称点。判断d的符号。若d<0,则(x,y)更新为(x+1,y),d更新为d+2x+3;否则(x,y)更新为(x+1,y-1),d更新为d+2(x-y)+5。当x小于等于y,重复步骤⑷和⑸,否则结束。四、案例实现1.CTestView.h文件//TestView.h:interfaceoftheCTestViewclass/////////////////////////////////////////////////////////////////////////////#if!defined(AFX_TESTVIEW_H__A75FDCFB_621C_4E38_A154_C344803E6372__INCLUDED_)#defineAFX_TESTVIEW_H__A75FDCFB_621C_4E38_A154_C344803E6372__INCLUDED_#if_MSC_VER>1000#pragmaonce#endif//_MSC_VER>1000#include"InputDlg.h"//包含对话框头文件classCTestView:publicCView{protected://createfromserializationonly CTestView(); DECLARE_DYNCREATE(CTestView)//Attributespublic: CTestDoc*GetDocument();//Operationspublic: voidGetMaxY();//获得屏幕的最大x值函数 voidGetMaxX();//获得屏幕的最大y值函数 voidCirclePoint(doublex,doubley);//八分法画圆子函数 voidMbcircle();//圆中点Bresenham算法//Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(CTestView) public: virtualvoidOnDraw(CDC*pDC);//overriddentodrawthisview virtualBOOLPreCreateWindow(CREATESTRUCT&cs); protected: virtualBOOLOnPreparePrinting(CPrintInfo*pInfo); virtualvoidOnBeginPrinting(CDC*pDC,CPrintInfo*pInfo); virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo); //}}AFX_VIRTUAL//Implementationpublic: virtual~CTestView();#ifdef_DEBUG virtualvoidAssertValid()const; virtualvoidDump(CDumpContext&dc)const;#endifprotected: intMaxX,MaxY;//屏幕x和y的最大坐标 doubleR;//圆的半径//Generatedmessagemapfunctionsprotected: //{{AFX_MSG(CTestView) afx_msgvoidOnMENUMbcircle(); //}}AFX_MSG DECLARE_MESSAGE_MAP()};#ifndef_DEBUG//debugversioninTestView.cppinlineCTestDoc*CTestView::GetDocument(){return(CTestDoc*)m_pDocument;}#endif///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_TESTVIEW_H__A75FDCFB_621C_4E38_A154_C344803E6372__INCLUDED_)2.CTestView.cpp文件//TestView.cpp:implementationoftheCTestViewclass#include"stdafx.h"#include"Test.h"#include"TestDoc.h"#include"TestView.h"#defineROUND(a)int(a+0.5)//四舍五入#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CTestViewIMPLEMENT_DYNCREATE(CTestView,CView)BEGIN_MESSAGE_MAP(CTestView,CView) //{{AFX_MSG_MAP(CTestView) ON_COMMAND(ID_MENU_Mbcircle,OnMENUMbcircle) //}}AFX_MSG_MAP //Standardprintingcommands ON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT,CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CTestViewconstruction/destructionCTestView::CTestView(){ //TODO:addconstructioncodehere}CTestView::~CTestView(){}BOOLCTestView::PreCreateWindow(CREATESTRUCT&cs){ //TODO:ModifytheWindowclassorstylesherebymodifying //theCREATESTRUCTcs returnCView::PreCreateWindow(cs);}///////////////////////////////////////////////////////////////////////////////CTestViewdrawingvoidCTestView::OnDraw(CDC*pDC){ CTestDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere}///////////////////////////////////////////////////////////////////////////////CTestViewprintingBOOLCTestView::OnPreparePrinting(CPrintInfo*pInfo){ //defaultpreparation returnDoPreparePrinting(pInfo);}voidCTestView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){ //TODO:addextrainitializationbeforeprinting}voidCTestView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){ //TODO:addcleanupafterprinting}///////////////////////////////////////////////////////////////////////////////CTestViewdiagnostics#ifdef_DEBUGvoidCTestView::AssertValid()const{ CView::AssertValid();}voidCTestView::Dump(CDumpContext&dc)const{ CView::Dump(dc);}CTestDoc*CTestView::GetDocument()//non-debugversionisinline{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestDoc))); return(CTestDoc*)m_pDocument;}#endif//_DEBUG///////////////////////////////////////////////////////////////////////////////CTestViewmessagehandlersvoidCTestView::GetMaxX()//得到客户区的最大横坐标{ CRectRect; GetClientRect(&Rect); MaxX=Rect.right; }voidCTestView::GetMaxY()//得到客户区最大纵坐标{ CRectRect; GetClientRect(&Rect); MaxY=Rect.bottom; }voidCTestView::Mbcircle()//圆中点Bresenham算法{ doublex,y,d; d=1.25-R;x=0;y=R; for(x=0;x<y;x++) { CirclePoint(x,y);//调用八分法画圆子函数if(d<0) d+=2*x+3;else { d+=2*(x-y)+5; y--; }}}voidCTestView::CirclePoint(doublex,doubley)//八分法画圆子函数{Circlepoint函数块的程序请更新Circlepoint函数块的程序请更新 COLORREFrgb=RGB(0,0,255);//定义圆的颜色dc.SetPixel(ROUND(x)+MaxX/2,ROUND(y)+MaxY/2,rgb);//x,y dc.SetPixel(ROUND(y)+MaxX/2,ROUND(x)+MaxY/2,rgb);//y,x dc.SetPixel(ROUND(y)+MaxX/2,-ROUND(x)+MaxY/2,rgb);//y,-x dc.SetPixel(ROUND(x)+MaxX/2,-ROUND(y)+MaxY/2,rgb);//x,-y dc.SetPixel(-ROUND(x)+MaxX/2,-ROUND(y)+MaxY/2,rgb);//-x,-y dc.SetPixel(-ROUND(y)+MaxX/2,-ROUND(x)+MaxY/2,rgb);//-y,-x dc.SetPixel(-ROUND(y)+MaxX/2,ROUND(x)+MaxY/2,rgb);//-y,x dc.SetPixel(-ROUND(x)+MaxX/2,ROUND(y)+MaxY/2,rgb);//-x,y}voidCTestView::OnMENUMbcircle()//菜单函数{ //TODO:Addyourcomman
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房产渠道经理年终总结
- 安徽省宿州市宿城第一中学2025届高三第六次模拟考试化学试卷含解析
- 2025届云南省楚雄州双柏县一中高三适应性调研考试化学试题含解析
- 小学下学期课件
- 2025年大中型计算机项目构思建设方案
- 2025年金属粉末:铜粉系列项目建设方案
- 2025年发热管项目建设总纲及方案
- 陕西艺术职业学院《高等环境生物学》2023-2024学年第二学期期末试卷
- 陕西警官职业学院《贴图绘制》2023-2024学年第一学期期末试卷
- 陕西铁路工程职业技术学院《巴蜀艺术鉴赏》2023-2024学年第二学期期末试卷
- 伤残员工合同标准文本
- 2024年广东惠州仲恺高新区招聘中学教师笔试真题
- 马化腾的创业故事
- 高中主题班会 心怀感恩志存高远课件-高一上学期感恩教育主题班会
- GB/T 24894-2025动植物油脂甘三酯分子2-位脂肪酸组分的测定
- 2025年国家公务员遴选考试全真模拟试卷及答案(共五套)
- 2025江苏苏豪控股集团招聘易考易错模拟试题(共500题)试卷后附参考答案
- 7.1影响深远的人文精神课件 -2024-2025学年统编版道德与法治七年级下册
- 2025年企业规章制度试题及答案
- 2025春人教版七年级英语下册重点知识默写
- 2025年驻马店全域矿业开发有限公司招聘27人笔试参考题库附带答案详解
评论
0/150
提交评论