




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一 Visual C+图形程序设计一、实验目的Visual C+是在Microsoft C的基础上发展而来的,随着计算机软、硬件技术的快速发展,如今Visual C+已成为集编辑、编译、运行、调试于一体功能强大的集成编程环境。本章以Visual C+ 6.0为对象,主要介绍Visual C+集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础,目的是通过对Visual C+的学习,掌握Visual C+图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。二、实验任务1 学习Visual C+图形程序设计的方法;2 掌握Visual C+集成编成
2、环境的使用、图形设备接口和常用图形程序设计。三、基础知识和实验步骤31 Visual C+ 6.0应用程序开发方法 介绍Visual C+ 6.0集成开发环境,以一个简单的实例介绍利用Visual C+应用程序工程建立方法和程序设计框架。3.1.1 Visual C+的集成开发环境从开始菜单中启动Visual C+ 6.0,进入开发集成环境。打开一个项目后,可以看到Visual C+ 6.0的开发环境由标题栏、工具栏、工作区窗口、源代码编辑窗口、输出窗口和状态栏组成,见图3.1所示。标题栏用于显示应用程序名和所打开的文件名,标题栏的颜色可以表明对应窗口是否被激活。菜单栏包括文件、编辑、显示、插
3、入、工程、编译、工具、窗口和帮助九项主菜单,包含了从源代码的编辑、界面设计、程序调试和编译运行在内的所有功能。工具栏列出了常用的菜单命令功能和对象方法。工具栏的下面是两个窗口,一个是工作区窗口,用于列出工程中的各种对象,一个是源代码编辑窗口,用于各个对象的程序设计。输出窗口显示项目建立过程中所产生的各种信息。屏幕底端是状态栏,它给出当前操作或所选择命令的提示信息。标题栏菜单栏工作区源代码编辑窗口状态栏 图3.1 Visual C+ 6.0集成开发环境3.1.2 应用程序工程的建立方法Visual C+提供了一种称为App Wizard的工具,利用该工具,用户可以方便地按照自己的需要创建符合需要
4、的应用程序框架。在这个基础上,用户可以进一步将自己编写的程序加入到这个框架中,实现用户程序的功能。下面介绍建立VcApp应用程序框架的方法,其它应用程序的方法都与此类似。第一步:启动Visual C+,选择工程方法从开始菜单中选择 Visual C+,进入Visual C+集成环境。从文件菜单中选择新建(New)命令,弹出图3-2对话框。切换到工程(Projects)标签,项目类型选择MFC AppWizard(exe),输入工程的名字(如VcApp),选择项目放置的位置,然后单击“确定”按钮。图3-2 Visual C+的New对话框第二步:设置应用程序的特性。这些设置包括六个问题,每一个问
5、题都有不同的选项供选择。一个问题选择完后,通过“下一步”(Next)选择下一个问题,直到六个问题选择完毕。还可以通过“上一步”(Back)返回上一个问题重新选择。下面继续上面的例子,在单击“确定”按钮后,弹出第一个问题窗口,如图3-3所示。第一个问题是建立什么类型的应用程序,有三个选项:单个文档(Single document)、多重文档(Multiple document)和基本对话(Dialog based)。单个文档应用程序主窗口中只有一个窗口,多重文档可以在主窗口中开多个子窗口,基本对话主窗口是一个对话框。例中选择单个文档,单击“确定”,进入下一个问题,如图3-4所示。第二个问题是数据
6、库的支持,是否用ODBC存取数据库,有四个选项:不包括数据库的支持(None)、仅包含ODBC头文件(Header files only)、指定一个数据库但没有文件支持和指定一个数据库但需要文件支持。当选择了后两项,则需要用户选择一个已经建立的数据库。例中不需要数据库支持,选择第一个选项“否”,进入第三个问题,如图3-5所示。 图3-3 第一个问题:选择应用程序的类型 图3-4第二个问题:选择是否要用ODBC支持第三个问题是对ActiveX的支持。有五个选项:(1)没有对ActiveX的支持;(2)ActiveX容器,它可以包含链接和嵌入对象。容器不能为其它的ActiveX程序提供支持,它只能
7、维护嵌入对象;(3)微型服务器(Mini-server),应用程序不能独立运行,只能被调用为其它程序建立ActiveX对象。(4)完整服务器(Full-server),它能够独立运行,并能够为其它应用程序建立ActiveX对象。(5)容器和服务器,一个应用程序可以同时是容器和服务器。在例子中,选择第一个选项,没有对ActiveX的支持,单击“下一个”(Next)进入下一个问题。 图3-5第三个问题:选择是否对ActiveX的支持 图3-6应用程序的特性和高级选项第四个问题是应用程序的特性和高级选项,如图3-6所示。例中全部采用默认选项,进入下一个问题。第五个问题是项目的风格、原文件注释和MFC
8、库类型,如图3-7所示。在例子中全部采用默认选项,进入第六个问题。第六个问题是确定类名和文件名,如图3-8所示。 基于第一个问题到第五个问题的回答,AppWizard会把将要建立的新类的名称通知用户。AppWizard将为应用程序建立四个新类,CVcAppApp是应用程序类,它是CWinApp的派生类。CMainFrame是一个拥有应用程序主窗口的类。CVcAppDoc和CVcAppView是该应用程序的文档和视图类。这些名字用户可以改变。最后单击“完成”(Finish),显示所建项目的信息,单击“确定”后,项目建立完成。 图3-7项目的风格、原文件注释和MFC库类型 图3-8通知MFC产生的
9、类名称3.1.3 输入源程序进行程序设计 应用程序项目工程建立以后,就为应用程序的开发建立了一个框架,这是不输入任何程序代码,对该项目程序进行编译和运行,可以生成一个完整的窗口程序。用户根据项目工程中的不同类,输入自己设计的程序代码,完成用户的程序设计。 例如,从VcApp Classes中找到CVcAppView的OnDraw()函数,如图3-9所示。双击OnDraw()函数,这时系统会打开VcAppView.cpp文件,而且光标正置于OnDraw()函数中,在其中输入下列语句:pDC->TextOut(30,30,"同学们好,欢迎使用VC+编程!");编译并运行该
10、程序,运行结果如图3-10所示。 图3-9 输入程序源代码 图3-10 运行结果32 图形设备接口和图形程序设计3.2.1 图形设备接口简介在Windows系统中,程序都是通过一个叫做图形设备接口(GDI, Graphics Device Interface)的抽象接口和硬件打交道,Windows会自动将设备环境表映射到相应的物理设备,并且会提供正确的输入/输出指令。GDI是Windows系统核心的三种动态链接库之一,它管理Windows系统的所有程序的图形输出。在Windows系统中,GDI向程序员提供了高层次的绘图函数,只要掌握这些绘图函数,就可以很方便地进行图形程序设计。另一个概念是设备
11、描述表(DC, Device Context)。DC是一个数据结构,当程序向GDI设备中绘图时,需要访问该设备的DC。MFC将GDI的DC封装在C+类中,包括CDC类和CDC派生类,这些类中的许多成员都是对本地GDI绘图函数进行简单封装而形成的内联函数。DC的作用就是提供程序与物理设备或者虚拟设备之间的联系,除此之外,DC还要处理绘图属性的设置,如文本的颜色等。程序员可以通过调用专门的GDI函数修改绘图属性,如SetTextColor()函数。CDC类是GDI封装在MFC中最大的一个类,它表示总的DC。表3.1列出了CDC中的一些常用绘图函数。表3.1 CDC类中常用绘图函数函 数描 述使用频
12、率Arc()椭圆弧*BitBlt()把位图从一个DC拷贝到另一个DC*Draw3dRect()绘制三维矩形*DrawDragRect()绘制用鼠标拖动的矩形*DrawEdge()绘制矩形的边缘*DrawIcon()绘制图标*Ellipse()绘制椭圆*FillRect()绘制用给定的画刷颜色填充矩形*FillRgn()绘制用给定的画刷颜色填充区域*FillSolidRed()绘制用给定的颜色填充矩形*FloodFill()用当前的画刷颜色填充区域*FrameRect()绘制矩形边界*FrameRgn()绘制区域边界*GetBKColor()获取背景颜色*GetCurrentBitmap()获取
13、所选位图的指针*GetCurrentBrush()获取所选画刷的指针*GetCurrentFont()获取所选字体的指针*GetCurrentPalette()获取所选调色板的指针*GetCurrentPen()获取所选画笔的指针*GetCurrentPosition()获取画笔的当前位置*GetDeviceCaps()获取显示设备能力的信息*GetMapMode()获取当前设置映射模式*Getpixel()获取给定像素的RGB颜色值*GetPolyFillMode()获取多边形填充模式*GetTextColor()获取文本颜色*GetTextExtent()获取文本的宽度和高度*GetTex
14、tMetrics()获取当前文本的信息*GetWindow()获取DC窗口的指针*GrayString()绘制灰色文本*LineTo()绘制直线*MoveTo()设置当前画笔位置*Pie()绘制饼图*Polygon()绘制多边形*PolyLine()绘制一组直线*RealizePalette()将逻辑调色板映射到系统调色板*Rectangle()绘制矩形*RoundRect()绘制圆角矩形*SelectObject()选择GDI绘图对象*SelectPalette()选择逻辑调色板*SelectStockObject()选择预定义图形对象*SetBkColor()设置背景颜色*SetMapMo
15、de()设置映射模式*SetPixel()把像素设定为给定的颜色*SetTextColor()设置文本颜色*StretchBlt()把位图从一个DC拷贝到另一个DC,并根据需要扩展或压缩位图*TextOut()绘制字符串文本*这些函数的语法和使用可以通过MSDN帮助查询。3.2.2节主要介绍Windows中基本图形,包括点、直线、圆、圆弧、矩形、椭圆、扇形、折线等程序设计3.2.2 绘制基本图形(1)画点 SetPixel()函数可以在指定的坐标位置按指定的颜色画点。函数原型说明如下:COLORREF CDC: SetPixel(int X, int Y, COLORREF crColor);
16、 其中,(X,Y)为点的坐标位置,crColor参数为点的颜色值。如果函数调用成功,则函数返回像素的颜色值,否则返回值为-1。颜色值通过RGB(Red,Green,Blue)来设置,其中三个参数取值0255。例如,在VcAPP项目中,在CVcAppView类中的OnDraw()函数中加入下列画点语句:/绘制一组彩色点/绘制一组彩色点pDC->TextOut(20,20,"point:");pDC->SetPixel(100,20,RGB(255,0,0); pDC->SetPixel(110,20,RGB(0,255,0);pDC->SetPixel
17、(120,20,RGB(0,0,255);pDC->SetPixel(100,20,RGB(255,255,0);pDC->SetPixel(100,20,RGB(255,0,255);pDC->SetPixel(100,20,RGB(0,255,255);pDC->SetPixel(100,20,RGB(0,0,0);pDC->SetPixel(100,20,RGB(255,255,255);运行程序,查看运行结果。(2)画直线和折线画直线需要LineTo()和MoveTo()两个函数的配合使用。LineTo()函数以当前位置所在的点为直线的起点,另指定一个点为
18、直线的终点,画出一段直线。直线的颜色通过画笔的颜色来设定,在后面介绍。LineTo()函数原型说明如下:BOOL CDC: LineTo(int nXEnd, int nYEnd);直线的终点位置由(nXEnd, nYEnd)指定。如果函数调用成功,那么该点就成为当前位置,并返回TRUE,否则返回FALSE。MoveTo()函数只是将当前位置移动到指定位置,它并没有画出直线,其函数说明为:BOOL CDC: MoveTo (int X, int Y);示例:在CVcAppView类中的OnDraw()函数中加入下列画点语句:/绘制直线pDC->TextOut(20,60,"Li
19、ne:");pDC->MoveTo(20,90); pDC->LineTo(160,90);Polyline()函数用来画一条折线,而PolyPolyline()函数则用来画多条折线,它们的函数原型说明如下:BOOL CDC:Polyline(COUST POINT *lppt, int cPoints);BOOL CDC:PolyPolyline(COUST POINT * lppt, COUST DWORD *lpdwPolyPoints, DWORD cCount); 在Polyline()函数中,lppt是指向折线顶点数组的指针,而cPoints是折线顶点数组中的
20、顶点数。例如,绘制一条具有4个顶点的折线,程序如下:POINT polylinepoint4=70,240,20,190,70,190,20,240;/从(70,240)-(20,190)-共四个顶点三条线pDC->Polyline(polylinepoint,4);在PolyPolyline()函数中,lppt是指向保存顶点数组的指针,而各条折线的顶点数则保存在lpdwPolyPoints参数所指向的数组中,最后的cCount参数指定折线的数目。例如:POINT polypolylinePt9=95,160,120,185,120,250,145,160,120,185,90,185,
21、150,185,80,210,160,210; DWORD dwPolyPoints4=3,2,2,2; /分四段折线,分别占用3,2,2,2个顶点 pDC->PolyPolyline(polypolylinePt, dwPolyPoints, 4);注:由于一条折线至少需要2个顶点,因此dwPolyPoints数组中的数不应该小于2。(3)画弧线和曲线通过Arc()函数画弧线或整个椭圆。椭圆限定在一个矩形内,称为外接矩形。Arc()函数的圆形说明如下:BOOL CDC: Arc(int nLeftRect, int nTopRect, int nRightRect, int nBott
22、omRect,int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc);其中,(nLeftRect, nTopRect)是外接矩形的左上角坐标值,(nRightRect, nBottomRect)是外接矩形的右下角坐标值。而椭圆中心与点(nXStartArc, nYStartArc)所构成的射线与椭圆的交点成为弧线的起点,椭圆中心与点(nXEndArc, nYEndArc)所构成的射线与椭圆的交点成为弧线的终点。椭圆上从始点到终点就形成一条弧线。 在Windows系统中,弧线从始点到终点的方向是逆时针方向,但可以通过SetArcDi
23、rection()函数将绘制弧线方向设置为顺时针方向。示例,用Arc()绘制圆、圆弧和椭圆,程序如下:for (i=1;i<6;i+) pDC->Arc(260-5*i,70-5*i,260+5*i,70+5*i,0,0,0,0);/画五个圆for (i=3;i<6;i+) pDC->Arc(260-10*i, 70-10*i, 260+10*i, 70+10*i, (int)260+10*i*cos(60*3.1415926/180),/注意include”math.h”(int)70+10*i*sin(60*3.1415926/180),(int)260+10*i*
24、cos(60*3.1415926/180),(int)70-10*i*sin(60*3.1415926/180); pDC->Arc(260-10*i, 70-10*i, 260+10*i, 70+10*i, (int)260-10*i*cos(60*3.1415926/180),(int)70-10*i*sin(60*3.1415926/180),(int)260-10*i*cos(60*3.1415926/180),(int)70+10*i*sin(60*3.1415926/180);Bezier曲线是最常见的非规则曲线之一。Bezier曲线属于三次曲线,需要四个控制顶点来确定一条B
25、ezier曲线,其中曲线通过第一点和最后一点,并且第一条边和最后一条边是曲线在起点和终点处的切线,从而确定了曲线的走向。PolyBezier()函数可以画出一条或多条Bezier曲线,其函数原型说明如下:BOOL CDC: PolyBezier(CONST POINT * lppt, DWORD cPoints);其中,lppt参数是曲线控制顶点所组成的数组,cPoints参数表示lppt数组中的顶点数,一条Bezier曲线需要四个控制顶点。如果lppt数组用于画多条Bezier曲线,第二条以后的曲线只需要三个控制顶点,因为后面的曲线总是把前一条曲线的终点作为自己的起点。示例,给出四个控制顶点
26、,画出一条Bezier曲线和特征多边形。/绘制Bezier 曲线POINT polyBezier4=20,310,60,240,120,300,160,230;pDC->Polyline(polyBezier,4);pDC->PolyBezier(polyBezier,4);(4)画封闭曲线Windows中提供了一组画封闭曲线的函数,包括绘制矩形、多边性、椭圆等,这些画封闭曲线的函数不但可以利用画笔来画出轮廓线,同时还可以利用画刷来填充这些封闭曲线所围成的区域。Rectangle()函数用来画矩形,其函数原型说明如下:BOOL CDC: Rectangle(int nLeftRec
27、t, int nTopRect, int nRightRect, int nBottomRect);其中,参数nLeftRect和 nTopRect给出了矩形左上角的坐标,而nRightRect和 nBottomRect则给出矩形的右下角坐标。Ellipse()函数的作用则是画椭圆形。在Ellipse()函数中,椭圆是由其外接矩形来确定的,外接矩形的中心与椭圆中心重合,矩形的长与宽和椭圆的长短轴相等。函数说明如下:BOOL CDC: Ellipse(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);其中的参数说明与Rec
28、tangle()函数相同。RoundRect()函数用来画圆角矩形,其函数的原型说明如下:BOOL CDC: RoundRect(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect,int nWidth, int nHeight);其中的前四个参数与Rectangle()函数相同,nWidth表示圆角的宽度, nHeight表示圆角的高度。Polygon()函数用来画封闭的任意多边形,其函数原型说明如下:BOOL CDC: Polygon(COUST POINT *lpPoints, int cCount); 其中的参数说明
29、与Polyline()函数相同。但两个函数有区别,Polygon()函数会自动将起点和终点相连形成封闭的多边形,而Polyline()函数则画出多条折线,只有当最后一点与起点相同时才画出封闭的多边形。示例,绘制矩形、圆角矩形、椭圆和多边形,程序如下:/绘制矩形、圆角矩形、椭圆和多边形pDC->Rectangle(190,270,250,310);pDC->RoundRect(265,270,330,310,30,20);pDC->Ellipse(260-50,200-30,260+50,200+30);POINT polygonPts3=390,160,430,220,350
30、,210;pDC->Polygon(polygonPts,3);实验二 基本图形的生成技术A直线生成算法一、实验目的 在一个图形系统中,基本图形(也称为图元、图素等)的生成技术是最基本的,任何复杂的图形都是由基本图形组成的,基本图形生成的质量直接影响该图形系统绘图的质量。所以,需要设计出精确的基本图形生成算法,以确保图形系统绘图的精确性。本次实验的目的就是验证直线生成的三种扫描算法,并要求对基本算法进行扩充和改进,包括:利用Visual C+实现三种直线生成算法,验证算法的正确性;二、实验任务(2学时)1 理解三种直线生成算法思想,写出实现程序;2 将10个像素作为步距单位,直线算法的示
31、例。三、基本知识和实验步骤任务一:实现三种画线程序DDA算法分析假设 直线的起点坐标为P1 (x1,y1),终点坐标为P2 (x2,y2), x方向的增量为 xx2x1 ;y方向上增量为 yy2y1,直线的斜率为 kyx当 xy 时,让 x 从 x1 到 x2 变化,每步递增 1,那么,x 的变化可以表示为 xi+1xi1,y 的变化可以表示为 yi+1yik用上式可求得图中直线 P1P2 和 y 向网格线的交点,但显示时要用舍入找到最靠近交点处的象素点耒表示。当 x<y 时,让 y 递增 1,x作相应变化。综合考虑,按照从(x1, y1)到(x2, y2)方向不同,分8个象限。对于方向
32、在第1a象限内的直线而言,取增量值Dx=1,Dy=m。对于方向在第1b象限内的直线而言,取增量值Dy=1,Dx=1/m。直线Bresenham算法分析 设直线从起点(x1, y1)到终点(x2, y2)。直线可表示为:方程y=mx+b,其中b=y1-m*x1,m=(y2-y1/(x2-x1)=dy/dx;此处的讨论先将直线方向限于1a象限,在这种情况下,当直线光栅化时,x每次都增加1个单元,即xi+1 = xi + 1而y的相应增加值应当小于1。为了光栅化,yi+1只可能选择右图中两种位置之一。yi+1的位置选择yi+1 =yi或者yi+1=yi+1,选择的原则是看精确值y与yi及yi+1的距
33、离d1及d2的大小而定。计算公式为y = m(xi + 1) + b (1)d1 = y - yi (2)d2 = yi +1 - y (3)如果d1-d2>0,则yi+1=yi+1,否则yi+1=yi。将式(1)、(2)、(3)代入d1-d2,再用dx乘等式两边,并以Pi=(d1-d2) dx代入上述等式,得Pi = 2xidy-2yidx+2dy+(2b-1) dx (4)其中,d1-d2是用以判断符号的误差。由于在1a象限,dx总大于0,所以Pi仍旧可以用作判断符号的误差。将(4)式中的i用i+1替换,于是Pi+1为Pi+1 = Pi+2dy-2(yi+1-yi) dx求误差的初值
34、P1,可将x1、y1和b代入式(4)中的xi、yi而得到 P1 = 2dy-dx 综述上面的推导,第1a象限内的直线Bresenham算法思想如下: 画点(x1, y1),dx=x2-x1,dy=y2-y1,计算误差初值P1=2dy- dx,i=1; 求直线的下一点位置 xi+1 = xi + 1 如果Pi>0,则yi+1=yi+1,否则yi+1=yi; 画点(xi+1, yi+1); 求下一个误差Pi+1,如果Pi>0,则Pi+1=Pi+2dy-2dx,否则 Pi+1=Pi+2dy; i=i+1;如果i<dx+1则转步骤2;否则结束操作。实验步骤:1 建立一个DDALine
35、的工程文件;2 添加ddaline()成员函数方法:在工作区中选择CLASSVIEW类窗口,右击CDDAlineView类,选择“add member function”,定义如下的成员函数:void ddaline(CDC* pDC,int x0,int y0,int x1,int y1,COLORREF color);3 编写自定义的成员函数ddaline()程序 void CDDALineView:ddaline(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color) int i; float length,x,y,dx,dy;
36、 length=abs(x1-x0); if (abs(y1-y0)>length) length=float(abs(y1-y0); dx=(float(x1-x0)/length; dy=(float(y1-y0)/length; x=x0+0.5;y=y0+0.5; for (i=1;i<=int(length);i+) pDC->SetPixel(int)x,(int)y,color); x=x+dx;y=y+dy; 4编写OnDraw()函数void CDDALineView:OnDraw(CDC* pDC)CDDALineDoc* pDoc = GetDocume
37、nt();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here ddaline(pDC,100,100,200,50,RGB(255,0,0);/1a ddaline(pDC,100,100,150,0,RGB(255,0,0);/1bddaline(pDC,100,100,50,0,RGB(255,0,0);/2bddaline(pDC,100,100,0,50,RGB(255,0,0);/2addaline(pDC,100,100,0,150,RGB(255,0,0);/3addaline(pDC,100,100,50,
38、200,RGB(255,0,0);/3b ddaline(pDC,100,100,150,200,RGB(255,0,0);/4bddaline(pDC,100,100,200,150,RGB(255,0,0);/4a5编译、调试和运行程序,查看程序结果。任务二:放大10倍后,算法演示程序 先画出(100,100)到(600,400)大小为10的网格,然后从(100,100)以10为单位,计算出直线上各个像素位置。步骤:1 建立DDA2Line工程;2 在OnDraw()函数中画出网格,并调用DDA2Line()函数 void CDDA2LineView:OnDraw(CDC* pDC)CDD
39、A2LineDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here/画网格int gi,gj;/画横线pDC->TextOut(70,70,"(100,100)");pDC->MoveTo(100,100);for(gj=100;gj<=400;gj=gj+10) pDC->MoveTo(100,gj);pDC->LineTo(600,gj);/画竖线 pDC->MoveTo(100,100);for (gi=100;g
40、i<=600;gi=gi+10) pDC->MoveTo(gi,100);pDC->LineTo(gi,400); pDC->TextOut(590,410,"(600,400)");/画出像素点DDA2Line(pDC,100,100,600,400,RGB(255,0,0);3添加DDA2Line()成员函数方法:在工作区中选择CLASSVIEW类窗口,右击CDDAlineView类,选择“add member function”,定义如下的成员函数:void DDA2Line(CDC* pDC,int x0,int y0,int x1,int
41、y1,COLORREF color);4.编写DDA2Line()函数 void CDDA2LineView:DDA2line(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color) /画网格int gi,gj;/画横线pDC->TextOut(70,70,"(100,100)");pDC->MoveTo(100,100);for(gj=100;gj<=400;gj=gj+10) pDC->MoveTo(100,gj);pDC->LineTo(600,gj);/画竖线 pDC->
42、MoveTo(100,100);for (gi=100;gi<=600;gi=gi+10) pDC->MoveTo(gi,100);pDC->LineTo(gi,400); pDC->TextOut(590,410,"(600,400)");/画出像素点DDA2Line(pDC,100,100,600,400,RGB(255,0,0);5.调试、运行程序直线Bresenham算法实验步骤:1、建立一个BresenhamLine的工程文件;2、添加BresenhamLine()成员函数方法:在工作区中选择CLASSVIEW类窗口,右击CDDAlineView类,选择“add member function”,定义如下的成员函数:void BresenhamLine(CDC *pDC, int x1, int y1, int x2, int y2, COLORREF color);3、编写自定义的成员函数BresenhamLine()程序 void CBresenhamLineView:BresenhamLine(CDC *pDC, int x1, int y1, int x2, int y2, COLORREF color) int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年幼儿园小班上学期班务总结模版
- 主播简约合同范例
- 创新型医疗器械的临床试验设计
- 供货安装安全合同样本
- 医疗保健领域中区块链UI的改进方案
- 供货担保合同范例
- 公司委托经营代理合同范例
- 医疗伦理医护人员在紧急情况下的责任与担当
- 医疗物联网IoT中区块链技术的隐私保护探讨
- 公共厕所看管合同范例
- 国家职业技能标准 (2021年版) 公共营养师
- 货币的起源与发展
- 森林防火PPT课件
- 多合规政策及流程变化对照版
- 钢箱梁的制作及安装方案
- 工程测量毕业设计毕业论文
- 艏艉密封装置安装工艺规程
- 一元二次方程四种解法知识点与练习题(包括十字相乘法)
- 水平四篮球行进间运球教学设计
- 雨露计划职业教育补助学籍证明四川
- 15MW双馈风力发电机电气原理图
评论
0/150
提交评论