计算机图形学学习总结 联系客服

发布时间 : 星期五 文章计算机图形学学习总结更新完毕开始阅读72c6aed149649b6648d74741

计 算

学院:计算机与通信工程学院 班级: 学号: 姓名:

日期:2010/12/11

机 图 形 学 学 习 总 结

目 录

计算机图形学学习总结 ........................................................................................................... 3 一、实验系统 ........................................................................................................................... 3 实验一 ................................................................................................................................... 3 (1)画点 .......................................................................................................................... 3 (2)画直线和折线 .......................................................................................................... 3 (3)画弧线和曲线 .......................................................................................................... 4 (4)画封闭曲线 .............................................................................................................. 5 (5) 画笔与画刷 ................................................................................................................. 5 实验二 ................................................................................................................................... 9 任务一:实现DDA画线程序 ......................................................................................... 9 任务二、放大10倍后,算法演示程序 ........................................................................ 10 任务三、加入鼠标功能,实现交互式画直线 .............................................................. 11 实验三 ................................................................................................................................. 13 任务一:中点画圆法的扫描转换算法 .......................................................................... 14 任务二:添加鼠标程序,实现交互式画圆 .................................................................. 15 任务三:编写中点画椭圆法的扫描转换程序 .............................................................. 16 实验四 ................................................................................................................................. 19 实验五 ................................................................................................................................. 21 任务一:编码裁剪算法的程序设计 .............................................................................. 22 任务二:用鼠标实现交互式裁剪效果 .......................................................................... 24 实验七 ................................................................................................................................. 26 任务一:抛物线程序设计 .............................................................................................. 26 任务二:Hermite 曲线程序设计 ................................................................................... 27 任务三:Bezier曲线的算法实现 .................................................................................. 27 实验八 ................................................................................................................................. 31 任务一:根据数学模型,编写几何变换程序 .............................................................. 31 任务二:利用鼠标实现交互式移动图形 ...................................................................... 34 实验特色 ............................................................................................................................. 35 二、学习总结 ......................................................................................................................... 38 三、评价和总结 ..................................................................................................................... 40

2

计算机图形学学习总结

一、实验系统

实验一

一、实验目的

Visual C++是在Microsoft C的基础上发展而来的,随着计算机软、硬件技术的快速发展,如今Visual C++已成为集编辑、编译、运行、调试于一体功能强大的集成编程环境。本章以Visual C++ 6.0为对象,主要介绍Visual C++集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础,目的是通过对Visual C++的学习,掌握Visual C++图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。 二、实验任务

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

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

(1)画点

SetPixel()函数可以在指定的坐标位置按指定的颜色画点。函数原型说明如下: COLORREF CDC:: SetPixel(int X, int Y, COLORREF crColor); 其中,(X,Y)为点的坐标位置,crColor参数为点的颜色值。如果函数调用成功,则函数返回像素的颜色值,否则返回值为-1。颜色值通过RGB(Red,Green,Blue)来设置,其中三个参数取值0~255。例如,在VcAPP项目中,在CVcAppView类中的OnDraw()函数中加入下列画点语句: //绘制一组彩色点 //绘制一组彩色点

pDC->TextOut(20,20,\

pDC->SetPixel(100,20,RGB(255,0,0)); pDC->SetPixel(110,20,RGB(0,255,0)); pDC->SetPixel(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()函数以当前位置所在的点为直线的起点,另指定一个点为直线的终点,画出一段直线。直线的颜色通过画笔的颜色来设定,在后面介绍。LineTo()函数原型说明如下:

直线的终点位置由(nXEnd, nYEnd)指定。如果函数调用成功,那么该点就成为当前位置,并返回TRUE,否则返回FALSE。

3

MoveTo()函数只是将当前位置移动到指定位置,它并没有画出直线,其函数说明为: BOOL CDC:: LineTo(int nXEnd, int nYEnd); BOOL CDC:: MoveTo (int X, int Y);

示例:在CVcAppView类中的OnDraw()函数中加入下列画点语句: //绘制直线

pDC->TextOut(20,60,\pDC->MoveTo(20,90); pDC->LineTo(160,90);

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

BOOL CDC::PolyPolyline(COUST POINT * lppt, COUST DWORD *lpdwPolyPoints, BOOL CDC::Polyline(COUST POINT *lppt, int cPoints);

在Polyline()函数中,lppt是指向折线顶点数组的指针,而cPoints是折线顶点数组中的顶点数。例如,绘制一条具有4个顶点的折线,程序如下:

POINT polylinepoint[4]={{70,240},{20,190},{70,190},{20,240}}; pDC->Polyline(polylinepoint,4);

在PolyPolyline()函数中,lppt是指向保存顶点数组的指针,而各条折线的顶点数则保存在lpdwPolyPoints参数所指向的数组中,最后的cCount参数指定折线的数目。例如: POINT polypolylinePt[9]={{95,160},{120,185},{120,250},{145,160},{120,185}, {90,185},{150,185},{80,210},{160,210}};

DWORD dwPolyPoints[4]={3,2,2,2}; //分四段折线,分别占用3,2,2,2个顶点 pDC->PolyPolyline(polypolylinePt, dwPolyPoints, 4);

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

(3)画弧线和曲线

通过Arc()函数画弧线或整个椭圆。椭圆限定在一个矩形内,称为外接矩形。Arc()函数的圆形说明如下:

int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc);

BOOL CDC:: Arc(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, 其中,(nLeftRect, nTopRect)是外接矩形的左上角坐标值,(nRightRect, nBottomRect)是外接矩形的右下角坐标值。而椭圆中心与点(nXStartArc, nYStartArc)所构成的射线与椭圆的交点成为弧线的起点,椭圆中心与点(nXEndArc, nYEndArc)所构成的射线与椭圆的交点成为弧线的终点。椭圆上从始点到终点就形成一条弧线。

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

示例,用Arc()绘制圆、圆弧和椭圆,程序如下: for (i=0;i<6;i++) {

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

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

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曲线属于三次曲线,需要四个控制顶点来确定一条

4