实验4 实现圆的生成算法之圆心为任意位置的圆的绘制。

一、实验目的
1. 熟悉CDC图形程序库;
2. 掌握中点画圆生成算法;
3. 掌握Bresenham画圆算法。
二、实验内容
利用VisualC++6.0设计一个简易画圆绘图板,验证圆生成算法。

下面是步骤:
首先创建多文档,之后的步骤实验二已经说了。

第一步:在Header Files 文件夹中找到Draw_CirView.h(我的工程名叫Draw_Cir)头文件打开,先声明一个变量m_nDrawType来保存用户所选的哪个算法。

class CDraw_CirView : public CView
{
private:    UINT m_nDrawType;
protected: // create from serialization onlyCDraw_CirView();DECLARE_DYNCREATE(CDraw_CirView)// Attributes
'
'
'

第二步:在Source Files 文件夹中找到Draw_CirView.cpp(我的工程名叫Draw_Cir),打开。在CDraw_CirView的构造函数中将m_nDrawType赋值为0。

CDraw_CirView::CDraw_CirView()
{// TODO: add construction code herem_nDrawType=0;
}

第四步:和做第二个实验一样,代码分别是下面的:


void CDraw_CirView::OnBre()
{// TODO: Add your command handler code herem_nDrawType=1;
}void CDraw_CirView::OnMid()
{// TODO: Add your command handler code herem_nDrawType=2;
}

第五步要:创建一个鼠标左键按下的响应函数OnLButtonDown(UINT nFlags, CPoint point) (实验二已经介绍怎么用了)这个函数的代码如下:

void CDraw_CirView::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: Add your message handler code here and/or call defaultCClientDC dc(this); switch (m_nDrawType){case 1:        //bresenham画圆{CDC*pDC=GetDC();//得到绘图类指针RedrawWindow();//重绘窗口(这个东西就是控制你的圆画第二次是否覆盖)int x,y,x0=point.x,y0=point.y,r=50;//圆的圆心为(x0,y0),半径为rint delta,delta1,delta2,direction;x=0;y=r;delta=2*(1-r);while(y>=0){pDC->SetPixel(x+x0,y+y0,RGB(0,0,255));pDC->SetPixel(x+x0,-y+y0,RGB(0,0,255));pDC->SetPixel(-x+x0,y+y0,RGB(0,0,255));pDC->SetPixel(-x+x0,-y+y0,RGB(0,0,255));if(delta<0){delta1=2*(delta+y)-1;if(delta<=0)direction=1;else direction=2;}else if(delta>0){delta2=2*(delta-x)-1;if(delta2<=0)direction=2;else direction=3;}else direction=2;switch(direction){case 1:x++;delta+=2*x+1;break;case 2:x++;y--;delta+=2*(x-y+1);break;case 3:y--;delta+=(-2*y+1);break;}}}break;case 2:             //中点画圆{CDC*pDC=GetDC();//得到绘图类指针//RedrawWindow();//重绘窗口(这个东西就是控制你的圆画第二次是否覆盖)int x,y,x0=point.x,y0=point.y,r=100;//圆的圆心为(x0,y0),半径为rfloat d;x=0;y=r;d=(float)1.25-r;pDC->SetPixel(x+x0,y+y0,RGB(255,0,0));pDC->SetPixel(y+x0,x+y0,RGB(255,0,0));pDC->SetPixel(y+x0,-x+y0,RGB(255,0,0));pDC->SetPixel(x+x0,-y+y0,RGB(255,0,0));pDC->SetPixel(-x+x0,-y+y0,RGB(255,0,0));pDC->SetPixel(-y+x0,-x+y0,RGB(255,0,0));pDC->SetPixel(-y+x0,x+y0,RGB(255,0,0));pDC->SetPixel(-x+x0,y+y0,RGB(255,0,0));while(x<=y){if(d<0){d=d+2*x+3;x++;}else{d=d+2*(x-y)+5;x++;y--;}pDC->SetPixel(x+x0,y+y0,RGB(255,0,0));pDC->SetPixel(y+x0,x+y0,RGB(255,0,0));pDC->SetPixel(y+x0,-x+y0,RGB(255,0,0));pDC->SetPixel(x+x0,-y+y0,RGB(255,0,0));pDC->SetPixel(-x+x0,-y+y0,RGB(255,0,0));pDC->SetPixel(-y+x0,-x+y0,RGB(255,0,0));pDC->SetPixel(-y+x0,x+y0,RGB(255,0,0));pDC->SetPixel(-x+x0,y+y0,RGB(255,0,0));}break;}}CView::OnLButtonDown(nFlags, point);
}

不懂得可以评论(我不一定说的清楚)。
我的QQ:2993016261(小号)。

实验四 使用C++的mfc实现圆心为任意位置的圆的绘制。相关推荐

  1. 问题四十四:怎么用ray tracing画空间任意位置的圆环的任意片段

    44.1 数学推导 同"41.1" 44.2 看C++代码实现 ----------------------------------------------tori_part_al ...

  2. 2017-2018-2 20165236 实验四《Android开发基础》实验报告

    2017-2018-2 20165236 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计       班级:1652班       姓名:郭金涛     ...

  3. python实训总结报告书_20172304 实验四python综合实践报告

    20172304 实验四python综合实践报告 姓名:段志轩 学号:20172304 指导教师:王志强 课程:Python程序设计 实验时间:2020年5月13日至2020年6月14日 实验分析 本 ...

  4. matlab 迭代 混沌与分形实验报告,实验四 函数的迭代混沌与分形.doc

    实验四 函数的迭代混沌与分形.doc 实验四函数的迭代.混沌与分形实验目的1认识函数的迭代:2了解混沌和分形迭代在数值计算中占有很重要的地位,了解和掌握它是很有必要的本实验将讨论用NEWTON迭代求方 ...

  5. 20145223《信息安全系统设计》 实验四 驱动程序设计

    20145223杨梦云<信息安全系统设计>实验四实验报告 一.配置开发环境(同实验一) 二.阅读和理解源代码 进入/arm2410cl/exp/drivers/01_demo,使用vi编辑 ...

  6. 实验四 主存空间的分配和回收

    实验四 主存空间的分配和回收 一.目的和要求 1.1. 实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 1.2. 实验要求 采用连续分配方式之动态分区分 ...

  7. 20155321 实验四 Android程序设计

    20155321 实验四 Android程序设计 安装Android studio成功 任务一:Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)( ...

  8. 2018-2019-1 20165318 20165322 20165326 实验四 外设驱动程序设计

    实验四 外设驱动程序设计 实验内容 任务一 任务二 问题及解决方法 参考链接 实验内容 任务一 学习资源中全课中的"hqyj.嵌入式Linux应用程序开发标准教程.pdf"中的第十 ...

  9. 实验四 数据库SQL语言基础编程

    -- 实验四 数据库SQL语言基础编程 -- 实验目的: --  掌握数据库查询语句的编写方法 --  掌握利用查询语言完成基本查询 --  掌握利用SQL语句完成数据的添加.删除.修改操作 -- 实 ...

最新文章

  1. for循环递减_讲讲关于循环的那些事
  2. 使用K.function()调试keras
  3. QCOW2 — ROW/COW 快照技术原理解析
  4. [Ops]阿里云服务器上无法发送邮件的现象原因及解决
  5. 乱码的根本原因是字节和字符的问题(转)
  6. 汉字乱码_别欺负我读书少,这些真的不是乱码,是汉字吗?你认识几个?
  7. 给谷歌浏览器安装vue调试工具:vue-devtools
  8. go语言 不支持动态加载_动态语言支持
  9. pycharm远程调试报错cant ser remote tunneling
  10. Windows下使用python库 curses遇到错误消息的解决方案 1
  11. 还原乌克兰与俄罗斯的电力系统网络交战过程
  12. yum: command not found
  13. Hot Sale Ray Ban Predator 2 Sunglasses, Cheap Ray Ban Jackie OhhⅡ
  14. 【教资必过!!!】思想品德课程理论基本知识
  15. Netdata监控安装(汉化)
  16. uni-app实现app内嵌微信文章
  17. 小米 未检测到任何互联网连接 因此不会自动重新连接
  18. 基于Intel 82571芯片的网卡介绍
  19. 2019校招农行面试经验
  20. 高数【积分-不定积分】--猴博士爱讲课

热门文章

  1. mysql update w3c_PHP MySQL Update
  2. linux显示不在sudoers文件中,Ubuntu无法使用sudo提权提示当前用户不在sudoers文件中...
  3. 三星android pro,够大才能爽 三星Galaxy Note Pro评测
  4. 2020-12-06
  5. awk的求和计算使用;awk多个分隔符如何使用?
  6. 经济参考报:想哭病毒为中国网络安全敲警钟
  7. MPLS LDP随堂笔记1
  8. go package学习——os
  9. 风暴数码论坛教程--加入ROOT等文件及方法
  10. 用sql语句实现按时间求累计值