实验二用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:AddyourcommandhandlercodehereInputDlgdlg;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算法可以类似实现