这篇文章将为大家详细讲解有关如何使用MFC实现图形学课程中中点圆算法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1.进入资源视图,新建对话框,编辑修改Caption或者ID属性
右击该对话框添加类 基类为 CDialog
命名为:MyCircleDialog
使用类向导,选择MyCircleDialog类,选 择成员变量 添加变量 value类型 int型
m_radius 设置 变量取值范围
m_circlex
m_circlex
2.添加菜单,设置ID 为 ID_MyCircleMenu 并通过类向导添加消息映射函数
选择类名 C***View
查找ID ID_MyCircleMenu,映射 ONCOMMAND 消息
C***View
3.添加变量并在构造函数中初始化
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交互 获取 输入数据的代码
// CMFCCircleDialogDemoView 消息处理程序
void CMFCCircleDialogDemoView::OnMycirclemenu()
{
// TODO: 在此添加命令处理程序代码
MyCircleDialog dlg; //定义一个对话框对象
if(dlg.DoModal() == IDOK) //显示对话框
{
m_vradius = dlg.m_radius;
m_vcirclex = dlg.m_circleX;
m_vcircley = dlg.m_circleY; //接收并存储编辑框数据
Invalidate(); //刷新视图
}
}
// CMFCTestView 绘制
5.在OnDraw中 添加 绘图 代码(取消CDC*参数注释,使用所有设备环境基类CDC画图,
也可以定义使用 其他设备环境类如CClientDC等)
void CMFCCircleDialogDemoView::OnDraw(CDC* pDC)
{
CMFCCircleDialogDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
/*确定圆心,画出直角坐标系*/
CRect rect;
GetWindowRect(rect);
int center_x = rect.Width()/2;
int center_y = rect.Height()/2;
CPen myPen; //创建画笔
myPen.CreateStockObject(BLACK_PEN); //设置画笔属性
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);
/*********************绘制圆****************/
//逻辑圆心坐标
/*
int m_vradius = 50;
int m_vcirclex = -70;
int m_vcircley = 100;
*/
//转化为画布中圆心坐标
center_x = center_x + m_vcirclex;
center_y = center_y - m_vcircley;
pDC->SetPixel(center_x,center_y+m_vradius,RGB(125,125,125));//绘制圆心的点
pDC->Ellipse(center_x-3,center_y-3,center_x+3,center_y+3); //画个小圆,确定圆心位置
int p=5/4-m_vradius; //键值的初始值
int x=0;
int y=m_vradius;
//使用中点圆算法画圆
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)); //以对称的方式完成圆的绘制
}
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)); //以对称的方式完成圆的绘制
}
Sleep(20);
}
}
关于“如何使用MFC实现图形学课程中中点圆算法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。