计算机图形学实验指导书Word文件下载.docx

上传人:b****6 文档编号:21355838 上传时间:2023-01-29 格式:DOCX 页数:109 大小:810.44KB
下载 相关 举报
计算机图形学实验指导书Word文件下载.docx_第1页
第1页 / 共109页
计算机图形学实验指导书Word文件下载.docx_第2页
第2页 / 共109页
计算机图形学实验指导书Word文件下载.docx_第3页
第3页 / 共109页
计算机图形学实验指导书Word文件下载.docx_第4页
第4页 / 共109页
计算机图形学实验指导书Word文件下载.docx_第5页
第5页 / 共109页
点击查看更多>>
下载资源
资源描述

计算机图形学实验指导书Word文件下载.docx

《计算机图形学实验指导书Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验指导书Word文件下载.docx(109页珍藏版)》请在冰豆网上搜索。

计算机图形学实验指导书Word文件下载.docx

五、实验总结40

实验三基本图形(元)生成技术

(二)41

一、实验目的41

二、实验任务41

三、实验内容41

中点画圆法的扫描转换算法41

任务二:

添加鼠标程序,实现交互式画圆43

任务三:

编写中点画椭圆法的扫描转换程序45

任务四:

添加鼠标程序,实现交互式画椭圆47

四、实验结果、分析和总结48

实验四基本图形处理技术

(一)49

一、实验目的49

二、实验任务49

三、实验步骤49

四、实验结果、分析和总结52

实验五基本图形处理技术

(二)53

一、实验目的53

二、实验任务53

三、实验步骤53

编码裁剪算法的程序设计53

用鼠标实现交互式裁剪效果56

四、实验结果和总结59

实验六交互式技术和用户接口60

一、实验目的60

二、实验任务60

三、实验内容和实验步骤60

菜单程序设计60

AutoCAD交互式绘图简介64

四、实验总结69

实验七曲线与曲面70

一、实验目的70

二、实验任务70

三、实验内容和实验步骤70

抛物线程序设计70

Hermite曲线程序设计71

Bezier曲线的算法实现72

三次B样条曲线的算法实现77

实验八二维几何变换79

一、实验目的79

二、实验任务79

三、实验内容和实验步骤79

根据数学模型,编写几何变换程序79

利用鼠标实现交互式移动图形82

四、实验分析和总结84

实验1VisualC++图形程序设计

一、实验目的

VisualC++是在MicrosoftC的基础上发展而来的,随着计算机软、硬件技术的快速发展,如今VisualC++已成为集编辑、编译、运行、调试于一体功能强大的集成编程环境。

本章以VisualC++6.0为对象,主要介绍VisualC++集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础,目的是通过对VisualC++的学习,掌握VisualC++图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。

二、实验任务

1.学习VisualC++图形程序设计的方法;

2.掌握VisualC++集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程、橡皮筋交互技术、画刷与画笔以及菜单设计等;

三、基础知识和实验步骤

3.1VisualC++6.0应用程序开发方法

介绍VisualC++6.0集成开发环境,以一个简单的实例介绍利用VisualC++应用程序工程建立方法和程序设计框架。

3.1.1VisualC++的集成开发环境

从开始菜单中启动VisualC++6.0,进入开发集成环境。

打开一个项目后,可以看到VisualC++6.0的开发环境由标题栏、工具栏、工作区窗口、源代码编辑窗口、输出窗口和状态栏组成,见图3.1所示。

标题栏用于显示应用程序名和所打开的文件名,标题栏的颜色可以表明对应窗口是否被激活。

菜单栏包括文件、编辑、显示、插入、工程、编译、工具、窗口和帮助九项主菜单,包含了从源代码的编辑、界面设计、程序调试和编译运行在内的所有功能。

工具栏列出了常用的菜单命令功能和对象方法。

工具栏的下面是两个窗口,一个是工作区窗口,用于列出工程中的各种对象,一个是源代码编辑窗口,用于各个对象的程序设计。

输出窗口显示项目建立过程中所产生的各种信息。

屏幕底端是状态栏,它给出当前操作或所选择命令的提示信息。

图3.1VisualC++6.0集成开发环境

3.1.2应用程序工程的建立方法

VisualC++提供了一种称为AppWizard的工具,利用该工具,用户可以方便地按照自己的需要创建符合需要的应用程序框架。

在这个基础上,用户可以进一步将自己编写的程序加入到这个框架中,实现用户程序的功能。

下面介绍建立VcApp应用程序框架的方法,其它应用程序的方法都与此类似。

第一步:

启动VisualC++,选择工程方法

从开始菜单中选择VisualC++,进入VisualC++集成环境。

从文件菜单中选择新建(New)命令,弹出图3-2对话框。

切换到工程(Projects)标签,项目类型选择MFCAppWizard(exe),输入工程的名字(如VcApp),选择项目放置的位置,然后单击“确定”按钮。

图3-2VisualC++的New对话框

第二步:

设置应用程序的特性。

这些设置包括六个问题,每一个问题都有不同的选项供选择。

一个问题选择完后,通过“下一步”(Next)选择下一个问题,直到六个问题选择完毕。

还可以通过“上一步”(Back)返回上一个问题重新选择。

下面继续上面的例子,在单击“确定”按钮后,弹出第一个问题窗口,如图3-3所示。

第一个问题是建立什么类型的应用程序,有三个选项:

单个文档(Singledocument)、多重文档(Multipledocument)和基本对话(Dialogbased)。

单个文档应用程序主窗口中只有一个窗口,多重文档可以在主窗口中开多个子窗口,基本对话主窗口是一个对话框。

例中选择单个文档,单击“确定”,进入下一个问题,如图3-4所示。

第二个问题是数据库的支持,是否用ODBC存取数据库,有四个选项:

不包括数据库的支持(None)、仅包含ODBC头文件(Headerfilesonly)、指定一个数据库但没有文件支持和指定一个数据库但需要文件支持。

当选择了后两项,则需要用户选择一个已经建立的数据库。

例中不需要数据库支持,选择第一个选项“否”,进入第三个问题,如图3-5所示。

图3-3第一个问题:

选择应用程序的类型

图3-4第二个问题:

选择是否要用ODBC支持

第三个问题是对ActiveX的支持。

有五个选项:

(1)没有对ActiveX的支持;

(2)ActiveX容器,它可以包含链接和嵌入对象。

容器不能为其它的ActiveX程序提供支持,它只能维护嵌入对象;

(3)微型服务器(Mini-server),应用程序不能独立运行,只能被调用为其它程序建立ActiveX对象。

(4)完整服务器(Full-server),它能够独立运行,并能够为其它应用程序建立ActiveX对象。

(5)容器和服务器,一个应用程序可以同时是容器和服务器。

在例子中,选择第一个选项,没有对ActiveX的支持,单击“下一个”(Next)进入下一个问题。

图3-5第三个问题:

选择是否对ActiveX的支持

第四个问题是应用程序的特性和高级选项,如图3-6所示。

图3-6应用程序的特性和高级选项

例中全部采用默认选项,进入下一个问题。

第五个问题是项目的风格、原文件注释和MFC库类型,如图3-7所示。

在例子中全部采用默认选项,进入第六个问题。

第六个问题是确定类名和文件名,如图3-8所示。

基于第一个问题到第五个问题的回答,AppWizard会把将要建立的新类的名称通知用户。

AppWizard将为应用程序建立四个新类,CVcAppApp是应用程序类,它是CWinApp的派生类。

CMainFrame是一个拥有应用程序主窗口的类。

CVcAppDoc和CVcAppView是该应用程序的文档和视图类。

这些名字用户可以改变。

最后单击“完成”(Finish),显示所建项目的信息,单击“确定”后,项目建立完成。

图3-7项目的风格、原文件注释和MFC库类型

图3-8通知MFC产生的类名称

3.1.3输入源程序进行程序设计

应用程序项目工程建立以后,就为应用程序的开发建立了一个框架,这是不输入任何程序代码,对该项目程序进行编译和运行,可以生成一个完整的窗口程序。

用户根据项目工程中的不同类,输入自己设计的程序代码,完成用户的程序设计。

例如,从VcAppClasses中找到CVcAppView的OnDraw()函数,如图3-9所示。

双击OnDraw()函数,这时系统会打开VcAppView.cpp文件,而且光标正置于OnDraw()函数中,在其中输入下列语句:

pDc->

TextOut(30,30,”同学们好,欢迎使用VC++编程!

”);

编译并运行该程序,运行结果如图3-10所示。

图3-9输入程序源代码

图3-10运行结果

3.2图形设备接口和图形程序设计

3.2.1图形设备接口简介

在Windows系统中,程序都是通过一个叫做图形设备接口(GDI,GraphicsDeviceInterface)的抽象接口和硬件打交道,Windows会自动将设备环境表映射到相应的物理设备,并且会提供正确的输入/输出指令。

GDI是Windows系统核心的三种动态链接库之一,它管理Windows系统的所有程序的图形输出。

在Windows系统中,GDI向程序员提供了高层次的绘图函数,只要掌握这些绘图函数,就可以很方便地进行图形程序设计。

另一个概念是设备描述表(DC,DeviceContext)。

DC是一个数据结构,当程序向GDI设备中绘图时,需要访问该设备的DC。

MFC将GDI的DC封装在C++类中,包括CDC类和CDC派生类,这些类中的许多成员都是对本地GDI绘图函数进行简单封装而形成的内联函数。

DC的作用就是提供程序与物理设备或者虚拟设备之间的联系,除此之外,DC还要处理绘图属性的设置,如文本的颜色等。

程序员可以通过调用专门的GDI函数修改绘图属性,如SetTextColor()函数。

CDC类是GDI封装在MFC中最大的一个类,它表示总的DC。

表3.1列出了CDC中的一些常用绘图函数。

表3.1CDC类中常用绘图函数

函数

描述

使用频率

Arc()

椭圆弧

****

BitBlt()

把位图从一个DC拷贝到另一个DC

*

Draw3dRect()

绘制三维矩形

**

DrawDragRect()

绘制用鼠标拖动的矩形

DrawEdge()

绘制矩形的边缘

DrawIcon()

绘制图标

***

Ellipse()

绘制椭圆

FillRect()

绘制用给定的画刷颜色填充矩形

FillRgn()

绘制用给定的画刷颜色填充区域

FillSolidRed()

绘制用给定的颜色填充矩形

FloodFill()

用当前的画刷颜色填充区域

FrameRect()

绘制矩形边界

FrameRgn()

绘制区域边界

GetBKColor()

获取背景颜色

*****

GetCurrentBitmap()

获取所选位图的指针

GetCurrentBrush()

获取所选画刷的指针

GetCurrentFont()

获取所选字体的指针

GetCurrentPalette()

获取所选调色板的指针

GetCurrentPen()

获取所选画笔的指针

GetCurrentPosition()

获取画笔的当前位置

GetDeviceCaps()

获取显示设备能力的信息

GetMapMode()

获取当前设置映射模式

Getpixel()

获取给定像素的RGB颜色值

GetPolyFillMode()

获取多边形填充模式

GetTextColor()

获取文本颜色

GetTextExtent()

获取文本的宽度和高度

GetTextMetrics()

获取当前文本的信息

GetWindow()

获取DC窗口的指针

GrayString()

绘制灰色文本

LineTo()

绘制直线

******

MoveTo()

设置当前画笔位置

Pie()

绘制饼图

Polygon()

绘制多边形

PolyLine()

绘制一组直线

RealizePalette()

将逻辑调色板映射到系统调色板

Rectangle()

绘制矩形

RoundRect()

绘制圆角矩形

SelectObject()

选择GDI绘图对象

SelectPalette()

选择逻辑调色板

SelectStockObject()

选择预定义图形对象

SetBkColor()

设置背景颜色

SetMapMode()

设置映射模式

SetPixel()

把像素设定为给定的颜色

SetTextColor()

设置文本颜色

StretchBlt()

把位图从一个DC拷贝到另一个DC,并根据需要扩展或压缩位图

TextOut()

绘制字符串文本

这些函数的语法和使用可以通过MSDN帮助查询。

3.2.2节主要介绍Windows中基本图形,包括电、直线、圆、圆弧、矩形、椭圆、扇形、折线等程序设计

3.2.2绘制基本图形

(1)画点

SetPixel()函数可以在指定的坐标位置按指定的颜色画点。

函数原型说明如下:

其中,(X,Y)为点的坐标位置,crColor参数为点的颜色值。

如果函数调用成功,则函数返回像素的颜色值,否则返回值为-1。

颜色值通过RGB(Red,Green,Blue)来设置,其中三个参数取值0~255。

例如,在VcAPP项目中,在CVcAppView类中的OnDraw()函数中加入下列画点语句:

//绘制一组彩色点

//绘制一组彩色点

pDC->

TextOut(20,20,"

point:

"

);

SetPixel(100,20,RGB(255,0,0));

SetPixel(110,20,RGB(0,255,0));

SetPixel(120,20,RGB(0,0,255));

SetPixel(100,20,RGB(255,255,0));

SetPixel(100,20,RGB(255,0,255));

SetPixel(100,20,RGB(0,255,255));

SetPixel(100,20,RGB(0,0,0));

SetPixel(100,20,RGB(255,255,255));

运行程序,查看运行结果。

(2)画直线和折线

画直线需要LineTo()和MoveTo()两个函数的配合使用。

LineTo()函数以当前位置所在的点为直线的起点,另指定一个点为直线的终点,画出一段直线。

直线的颜色通过画笔的颜色来设定,在后面介绍。

LineTo()函数原型说明如下:

直线的终点位置由(nXEnd,nYEnd)指定。

如果函数调用成功,那么该点就成为当前位置,并返回TRUE,否则返回FALSE。

MoveTo()函数只是将当前位置移动到指定位置,它并没有画出直线,其函数说明为:

示例:

在CVcAppView类中的OnDraw()函数中加入下列画点语句:

//绘制直线

TextOut(20,60,"

Line:

MoveTo(20,90);

LineTo(160,90);

Polyline()函数用来画一条折线,而PolyPolyline()函数则用来画多条折线,它们的函数原型说明如下:

在Polyline()函数中,lppt是指向折线顶点数组的指针,而cPoints是折线顶点数组中的顶点数。

例如,绘制一条具有4个顶点的折线,程序如下:

POINTpolylinepoint[4]={{70,240},{20,190},{70,190},{20,240}};

pDC->

Polyline(polylinepoint,4);

在PolyPolyline()函数中,lppt是指向保存顶点数组的指针,而各条折线的顶点数则保存在lpdwPolyPoints参数所指向的数组中,最后的cCount参数指定折线的数目。

例如:

POINTpolypolylinePt[9]={{95,160},{120,185},{120,250},{145,160},{120,185},

{90,185},{150,185},{80,210},{160,210}};

DWORDdwPolyPoints[4]={3,2,2,2};

//分四段折线,分别占用3,2,2,2个顶点

PolyPolyline(polypolylinePt,dwPolyPoints,4);

注:

由于一条折线至少需要2个顶点,因此dwPolyPoints数组中的数不应该小于2。

(3)画弧线和曲线

通过Arc()函数画弧线或整个椭圆。

椭圆限定在一个矩形内,称为外接矩形。

Arc()函数的圆形说明如下:

其中,(nLeftRect,nTopRect)是外接矩形的左上角坐标值,(nRightRect,nBottomRect)是外接矩形的右下角坐标值。

而椭圆中心与点(nXStartArc,nYStartArc)所构成的射线与椭圆的交点成为弧线的起点,椭圆中心与点(nXEndArc,nYEndArc)所构成的射线与椭圆的交点成为弧线的终点。

椭圆上从始点到终点就形成一条弧线。

在Windows系统中,弧线从始点到终点的方向是逆时针方向,但可以通过SetArcDirection()函数将绘制弧线方向设置为顺时针方向。

示例,用Arc()绘制圆、圆弧和椭圆,程序如下:

for(i=0;

i<

6;

i++)

{

Arc(260-5*i,70-5*i,260+5*I,70+5*i,260+5*i,70,260+5*i,70);

}

for(i=3;

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)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),

(int)70+10*i*sin(60*3.1415926/180));

Bezier曲线是最常见的非规则曲线之一。

Bezier曲线属于三次曲线,需要四个控制顶点来确定一条Bezier曲线,其中曲线通过第一点和最后一点,并且第一条边和最后一条边是曲线在起点和终点处的切线,从而确定了曲线的走向。

PolyBezier()函数可以画出一条或多条Bezier曲线,其函数原型说明如下:

其中,lppt参数是曲线控制顶点所组成的数组,cPoints参数表示lppt数组中的顶点数,一条Bezier曲线需要四个控制顶点。

如果lppt数组用于画多条Bezier曲线,第二条以后的曲线只需要三个控制顶点,因为后面的曲线总是把前一条曲线的终点作为自己的起点。

示例,给出四个控制顶点,画出一条Bezier曲线和特征多边形。

//绘制Bezier曲线

POINTpolyBezier[4]={{20,310},{60,240},{120,300},{160,330}};

Polyline(polyBezier,4);

PolyBezier(polyBezier,4);

(4)画封闭曲线

Windows中提供了一组画封闭曲线的函数,包括绘制矩形、多边性、椭圆等,这些画封闭曲线的函数不但可以利用画笔来画出轮廓线,同时还可以利用画刷来填充这些封闭曲线所围成的区域。

Rectangle()函数用来画矩形,其函数原型说明如下:

其中,参数nLeftRect和nTopRect给出了矩形左上角的坐标,而nRightRect和nBottomRect则给出矩形的右下角坐标。

Ellipse()函数的作用则是画椭圆形。

在Ellipse()函数中,椭圆是由其外接矩形来确定的,外接矩形的中心与椭圆中心重合,矩形的长与宽和椭圆的长短轴相等。

函数说明如下:

其中的参数说明与Rectangle()函数相同。

RoundRect()函数用来画圆角矩形,其函数的原型说明如下:

其中的前四个参数与Rectangle()函数相同,nWidth表示圆角的宽度,nHeight表示圆角的高度。

Polygon()函数用来画封闭的任意多边形,其函数原型说明如下:

其中的参数说明与Polyline()函数相同。

但两个函数有区别,Polygon()函数会自动将起点和终点相连形成封闭的多边形,而Polyline()函数则画出多条折线,只有当最后一点与起点相同时才画出封闭的多边形。

示例,绘制矩形、圆角矩形、椭圆和多边形,程序如下:

//绘制矩形、圆角矩形、椭圆和多边形

Rectangle(190,270,250,310);

RoundRect(265,270,330,310,30,20);

Ellipse(260-50,200-30,260+50,200+30);

POINTpolygonPts[3]={{390,160},{430,220},{350,210}};

Polygon(polygonPts,3);

3

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

当前位置:首页 > 小学教育 > 语文

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

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