图形学实验二.docx

上传人:b****1 文档编号:1069824 上传时间:2022-10-16 格式:DOCX 页数:7 大小:328.45KB
下载 相关 举报
图形学实验二.docx_第1页
第1页 / 共7页
图形学实验二.docx_第2页
第2页 / 共7页
图形学实验二.docx_第3页
第3页 / 共7页
图形学实验二.docx_第4页
第4页 / 共7页
图形学实验二.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

图形学实验二.docx

《图形学实验二.docx》由会员分享,可在线阅读,更多相关《图形学实验二.docx(7页珍藏版)》请在冰豆网上搜索。

图形学实验二.docx

图形学实验二

图形学实验二

实验二用DDA算法、中点画线法和Bresenham算法绘制直线

[实验目的]:

掌握DDA算法、中点画线法和Bresenham算法的原理,在VC++6.0下设计实现DDA算法、中点算法和Bresenham算法绘制直线;

[实验内容]:

1.利用SetPixel函数编程实现DDA画线法

SetPixel是CDC类的成员函数,用来绘制像素点颜色

类属:

CDC:

:

SetPixel

原型:

COLORREFSetPixel(inx,inty,COLORREFcrColor)

参数说明:

SetPixel函数中,COLORREF是32位颜色数据类型;第1和第2个参数x,y是像素点位置的逻辑坐标值,第三个参数crColor是像素点的颜色值,COLORREF型变量可以用RGB(bRed,bGreen,bBlue)来指定相应的颜色值,每种颜色用1B长度表示,可以被设定为0~255.

DDA画线法

步骤一:

建立MFCAppWizard(exe)工程,命名为DDALine

步骤二:

选择SingleDocment按钮,其余保持默认值,单击Finish按钮结束。

步骤三:

设计一个对话框类,用于输入直线起点终点坐标

1.在资源视图ResourceView中选择Dialog,右击选择InsertDialog,在对话框中添加静态文本StaticText和编辑框EditBox控件并修改属性。

2.双击对话框弹出AddingaClass,保持默认值添加一个新类Creatanewclass,单击OK。

在弹出的对话框类中填写对话框类名InputDlg,单击确定。

3.对对话框类进行设计,在View菜单下选择MFCClassWizard菜单项,选中MemberVariables标签页。

修改成员变量的名称和类型。

添加IDC_EDIT1的成员变量名m_1,类型为double,代表起点坐标中的x0;类似地依次添加m_2,m_3,m_4。

步骤三:

添加工具条按钮,修改其ID号为ID_MENUDDALine。

步骤四:

为工具条按钮ID_MENUDDALine增加对应的功能。

从主菜单View中打开类向导ClassWizard。

在Classname中选择CDDALineView,在ObjectIDs中选择ID_MENUDDALine,在Messages中选择Command,点击AddFunction,自动生成对应函数OnMENUDDALine

步骤五:

在DDALineView.h和DDALineView.cpp中添加相应代码

1.在DDALineView.h中添加以下代码

添加对话框头文件:

#include"InputDlg.h"

在类CDDALineView中声明无参公有成员函数DDALine()

public:

voidDDALine();

和保护数据成员x0,y0,x1,y1,用于传递直线的起点和终点坐标

protected:

doublex0,y0,x1,y1;

2.在DDALineView.cpp中添加成员函数DDALine()

voidCDDALineView:

:

DDALine()

{

CClientDCdc(this);//显示器客户区设备上下文类

COLORREFrgb=RGB(0,0,255);//定义直线颜色为蓝色

//DDA算法

doublex,y,k;

x=x0;y=y0,k=(y1-y0)/(x1-x0);

for(x=x0;x<=x1;x++)

{

dc.SetPixel(int(x+0.5),int(y+0.5),rgb);

y=y+k;

}

}

说明:

CClientDC类:

显示器客户区设备上下文类。

它是设备上下文基类CDC的派生类,其构造函数调用GetDC函数,析构函数调用ReleaseDC函数。

构造函数的作用是创建对象时对数据成员进行初始化,析构函数的作用是撤销对象时清理对象占用的内存空间。

3.在DDALineView.cpp中为成员函数OnMENUDDALine()添加以下代码

voidCDDALineView:

:

OnMENUDDALine()

{

//TODO:

Addyourcommandhandlercodehere

InputDlgdlg;

if(dlg.DoModal()==IDOK)

{

x0=dlg.m_1;

y0=dlg.m_2;

x1=dlg.m_3;

y1=dlg.m_4;

}

AfxGetMainWnd()->SetWindowText("案例:

直线DDA算法");

RedrawWindow();

DDALine();

}

2.中点算法和bresenham算法可以类似实现

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1