实验四 使用C++的mfc实现圆心为任意位置的圆的绘制。
实验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实现圆心为任意位置的圆的绘制。相关推荐
- 问题四十四:怎么用ray tracing画空间任意位置的圆环的任意片段
44.1 数学推导 同"41.1" 44.2 看C++代码实现 ----------------------------------------------tori_part_al ...
- 2017-2018-2 20165236 实验四《Android开发基础》实验报告
2017-2018-2 20165236 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:郭金涛 ...
- python实训总结报告书_20172304 实验四python综合实践报告
20172304 实验四python综合实践报告 姓名:段志轩 学号:20172304 指导教师:王志强 课程:Python程序设计 实验时间:2020年5月13日至2020年6月14日 实验分析 本 ...
- matlab 迭代 混沌与分形实验报告,实验四 函数的迭代混沌与分形.doc
实验四 函数的迭代混沌与分形.doc 实验四函数的迭代.混沌与分形实验目的1认识函数的迭代:2了解混沌和分形迭代在数值计算中占有很重要的地位,了解和掌握它是很有必要的本实验将讨论用NEWTON迭代求方 ...
- 20145223《信息安全系统设计》 实验四 驱动程序设计
20145223杨梦云<信息安全系统设计>实验四实验报告 一.配置开发环境(同实验一) 二.阅读和理解源代码 进入/arm2410cl/exp/drivers/01_demo,使用vi编辑 ...
- 实验四 主存空间的分配和回收
实验四 主存空间的分配和回收 一.目的和要求 1.1. 实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 1.2. 实验要求 采用连续分配方式之动态分区分 ...
- 20155321 实验四 Android程序设计
20155321 实验四 Android程序设计 安装Android studio成功 任务一:Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)( ...
- 2018-2019-1 20165318 20165322 20165326 实验四 外设驱动程序设计
实验四 外设驱动程序设计 实验内容 任务一 任务二 问题及解决方法 参考链接 实验内容 任务一 学习资源中全课中的"hqyj.嵌入式Linux应用程序开发标准教程.pdf"中的第十 ...
- 实验四 数据库SQL语言基础编程
-- 实验四 数据库SQL语言基础编程 -- 实验目的: -- 掌握数据库查询语句的编写方法 -- 掌握利用查询语言完成基本查询 -- 掌握利用SQL语句完成数据的添加.删除.修改操作 -- 实 ...
最新文章
- for循环递减_讲讲关于循环的那些事
- 使用K.function()调试keras
- QCOW2 — ROW/COW 快照技术原理解析
- [Ops]阿里云服务器上无法发送邮件的现象原因及解决
- 乱码的根本原因是字节和字符的问题(转)
- 汉字乱码_别欺负我读书少,这些真的不是乱码,是汉字吗?你认识几个?
- 给谷歌浏览器安装vue调试工具:vue-devtools
- go语言 不支持动态加载_动态语言支持
- pycharm远程调试报错cant ser remote tunneling
- Windows下使用python库 curses遇到错误消息的解决方案 1
- 还原乌克兰与俄罗斯的电力系统网络交战过程
- yum: command not found
- Hot Sale Ray Ban Predator 2 Sunglasses, Cheap Ray Ban Jackie OhhⅡ
- 【教资必过!!!】思想品德课程理论基本知识
- Netdata监控安装(汉化)
- uni-app实现app内嵌微信文章
- 小米 未检测到任何互联网连接 因此不会自动重新连接
- 基于Intel 82571芯片的网卡介绍
- 2019校招农行面试经验
- 高数【积分-不定积分】--猴博士爱讲课