计算机图形学课程报告

2025-03-08 版权声明 我要投稿

计算机图形学课程报告(通用7篇)

计算机图形学课程报告 篇1

课程名称 : 计算机图形学 实验名称 : 图形绘制与变换 学 院 : 电子信息工程学院 专 业 : 计算机科学与技术 班 级 : 11计科本 01班 学 号 : 111102020103 姓 名 : 张慧 指导教师 : 王征风

二零一四年

目录

一、引言----------------3

二、设计需求---------3

2.1 设计目标--3 2.2 设计环境--3

2.2.1 VC++6.0------------------------3 2.2.2 MFC------------------------------4 2.3 设计题目及要求----------------------4 2.4 总体流程图----------------------------4

三、课程设计原理---5

3.1 实现的算法------------------------------5

3.1.2 Bresenham算法画直线------5 3.1.3 中心点算法画圆和椭圆------5 3.2 图形变换的基本原理------------------7

3.2.1平移变换------------------------7 3.2.2 旋转变换----------------------8 3.2.3 比例变换----------------------8

四、总体设计与功能实现-------------------------8

4.1 主要界面设计---------------------------8 4.2 设置颜色界面---------------------------8

4.2.1 界面设置代码------------------8 4.2.2 运行结果------------------------9 4.3 二维线画图元实现---------------------9 4.4 画多边形功能的实现--------------13 4.5 画Bezier曲线功能的实现-------14 4.6 二维图形变换的实现--------------16 4.7 三维图形的变换--------------------17

五、实验心得体会

一、引言

计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。是计算机科学的一个分支领域,主要关注数字合成与操作视觉的图形内容。计算机图形学研究的是应用计算机产生图像的所有工作,不管图像是静态的还是动态的,可交互的还是固定的,等等。图形API是允许程序员开发包含交互式计算机图形操作的应用而不需要关注图形操作细节或任务系统细节的工具集。计算机图形学有着广泛的应用领域,包括物理、航天、电影、电视、游戏、艺术、广告、通信、天气预报等几乎所有领域都用到了计算机图形学的知识,这些领域通过计算机图形学将几何模型生成图像,将问题可视化从而为各领域更好的服务。

计算机图形学利用计算机产生让人赏心悦目的视觉效果,必须建立描述图形的几何模型还有光照模型,再加上视角、颜色、纹理等属性,再经过模型变换、视图变换、投影操作等,这些步骤从而实现一个完整的OpenGL程序效果。OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植。计算机图形学通过应用OpenGL的功能,使得生成的图形效果具有高度真实感。学习计算机图形学的重点是掌握OpenGL在图形学程序中的使用方法。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。同时,真实感图形计算的结果是以数字图像的方式提供的,计算机图形学也就和图像处理有着密切的关系。

通过21世纪是信息的时代,在日新月异的科技更新中相信计算机会发挥越来越重要的作用,计算机图形学也会在更多的领域所应用,虽然我国在这方面还比较薄弱,但相信会有越来越好的时候的。

二、设计需求

2.1 设计目标

以图形学算法为目标,深入研究。继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面作出评价和改进意见。通过完成一个完整程序,经历策划、设计、开发、测试、总结和验收各阶段,达到:巩固和实践计算机图形学课程中的理论和算法;学习表现计算机图形学算法的技巧;培养认真学习、积极探索的精神。

2.2 设计环境

2.2.1 VC++6.0 VC++6.0是 Microsoft 公司推出的一个基于 Windows 系统平台、可视化的 集成开发环境,它的源程序按 C++语言的要求编写,并加入了微软提供的功能 强大的 MFC(Microsoft Foundation Class)类库。MFC 中封装了大部分 Windows API 函数和 Windows 控件,它包含的功能涉及到整个 Windows 操作系统。MFC 不仅给用户提供了 Windows 图形环境下应用程序的框架,而且还提供了创建应 用程序的组件,这样,开发人员不必从头设计创建和管理一个标准 Windows 应 用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。另 外,它提供了大量的代码,指导用户编程时实现某些技术和功能。因此,使用VC++提供的 高度可视化的应用程序开发工具和 MFC 类库,可使应用程序开发变 得简单。2.2.2 MFC MFC(Microsoft Foundation Classes),是 一 个 微 软 公 司 提 供 的 类 库(class libraries)以 C++类的形式封装了 Windows 的 API,它包含了窗口等许多类的定义。各种类的集合构成了一个应运程序的框架结构,以减少应用程序开发人员的工作 量。其中包含的类包含大量 Windows 句柄封装类和很多 Windows 的内建控件和组 件的封装类。MFC 6.0 版本封装了大约 200 个类,其中的一些可以被用户直接使用。例如CWnd 类封装了窗口的功能,包括打印文本、绘制图形及跟踪鼠标指针的移动等;CsplitterWnd 类是从 CWnd 类派生出来的,继承了基类或称父类 CWnd 类的所 有特 性,但增加了自己的功能,实现拆分窗口,使窗口至少可被拆分成两个窗口,用户 可以移动两个窗口之间的边框来改变窗口的大小;CtoolBar 类可以定义工具栏等。MFC 命名的惯例是类的名字通常是由“C”打头;成员变量使用前缀“m_”,接着使用一个字母来指明数据类型,然后是变量的名称;所有的单词用大写字母开头。

2.3 设计题目及要求

(1)题目:实现多边形和曲线的绘制和变换

(2)要求:学会使用VC++编写实现图形的绘制变换,需包括直线、曲线、多边形的绘制和变换,及三维立体图形的相应变换.2.4 总体流程图

三、课程设计原理

3.1 实现的算法

3.1.1 DDA算法画直线

DDA是数字微分分析式(Digital Differential Analyzer)的缩写。

已知直线两端点(x1,y1)、(x2,y2)则斜率m为:m =(y2-y1)/(x2-x1)= Dx/Dy;直线中的每一点坐标都可以由前一点坐标变化一个增量(Dx, Dy)而得到,即表示为递归式: xi+1=xi+Dx yi+1=yi+Dy。

递归式的初值为直线的起点(x1, y1),这样,就可以用加法来生成一条直线。具体算法是: 该算法适合所有象限,其中用了用了两个函数如:Integer(-8.5)=-9;Integer(8.5)=8;Sign(i),根据i的正负,分别得到-1,0,+1; 相应代码:

//DDA DrawLine

{if(abs(x2-x1)> abs(y2-y1))

length = abs(x2-x1);

else

length = abs(y2-y1);

Dx =(x2-x1)/length;

Dy =(y2-y1)/length;

x = x1+0.5*Sign(Dx);

y = x2 + 0.5*Sign(Dy);

i = 1;

while(i <= lenght)

{ setpixel(Integer(x),Integer(y),color);

x= x + Dx;

y= y + Dy;

i+=1;} } 3.1.2 Bresenham算法画直线

思路如下: // 假设该线段位于第一象限内且斜率大于0小于1,设起点为(x1,y1),终点为(x2,y2).// 根据对称性,可推导至全象限内的线段.1.画起点(x1,y1).2.准备画下个点。x坐标增1,判断如果达到终点,则完成。否则,由图中可知,下个要画的点要么为当前点的右邻接点,要么是当前点的右上邻接点.如果线段ax+by+c=0与x=x1+1的交点的y坐标大于M点的y坐标的话,下个点为U(x1+1,y1+1),否则,下个点为B(x1+1,y1),3.画点(U或者B).4.跳回第2步.5.结束.3.1.3中心点算法画圆和椭圆

(1)中心点算法画圆

在一个方向上取单位间隔,在另一个方向的取值由两种可能取值的中点离圆的远近而定。实际处理中,用决策变量的符号来确定象素点的选择,因此算法效率较高。生成圆弧的中点算 法和上面讲到的生成直线段的中点算法类似。

考虑第一象限内x[0,R/2]的八分之一圆弧段。经过计算,得出判别式的递推公式为:

di1di2xi3di2(xiyi)5d0d0

(xi, M SE yi,r)E 这两个递推公式的初值条件为:

(x0,y0,r)(0,R)d05/4R

编写成员函数如下:

void CMy2_9View::MidPointEllipse(CDC *pDC, double a, double b, int color){ double x,y,d,xP,yP,squarea,squareb;

squarea=a*a;

squareb=b*b;

xP=(int)(0.5+(double)squarea/sqrt((double)(squarea+squareb)));

yP=(int)(0.5+(double)squareb/sqrt((double)(squarea+squareb)));

x=0;

y=b;

d=4*(squareb-squarea*b)+squarea;

pDC->SetPixel(x,y,color);

while(x<=xP)

{if(d<=0)d+=4*squareb*(2*x+3);

else

{d+=4*squareb*(2*x+3)-8*squarea*(y-1);

y--;}

x++;

pDC->SetPixel(x,y,color);}

x=a;

y=0;

d=4*(squarea-a*squareb)+squareb;

pDC->SetPixel(x,y,color);

while(y

{ if(d<=0)d+=4*squarea*(2*y+3);

else

{d+=4*squarea*(2*y+3)-8*squareb*(x-1);

x--;}

y++;

pDC->SetPixel(x,y,color);}} 编写OnDraw函数如下:

void CMy2_9View::OnDraw(CDC* pDC){CMy2_9Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);MidPointEllipse(pDC,500,300,RGB(0,0,0));}(2)中心点算法画椭圆

我们先考虑圆心在原点的椭圆的生成,对于中心不是原点的椭圆,可以通过坐标的平移变换获得相应位置的椭圆。中心在原点。焦点在坐标轴上的标准椭圆具有X轴对称、Y轴对称和原点对称特性,已知椭圆上第一象限的P点坐标是(x, y),则椭圆在另外三个象限的对称点分别是(x,-y)、(-x, y)和(-x,-y)。因此,只要画出第一象限的四分之一椭圆,就可以利用这三个对称性得到整个椭圆。

相应代码:

void MP_Ellipse(int xc , int yc , int a, int b){ double sqa = a * a;double sqb = b * b;double d = sqb + sqa *(-b + 0.25);int x = 0;int y = b;EllipsePlot(xc, yc, x, y);while(sqb *(x + 1)< sqa *(y1))* 2-(a * b)* 2;while(y > 0){if(d < 0){ d += sqb *(2 * x + 2)+ sqa *(-2 * y + 3);x++;} else

{d += sqa *(-2 * y + 3);} y--;EllipsePlot(xc, yc, x, y);}} 3.2 图形变换的基本原理

3.2.1平移变换

平移变换函数如下:

void glTranslate{fd}(TYPE x, TYPE y, TYPE z); 三个函数参数就是目标分别沿三个轴向平移的偏移量。这个函数表示用于这三个偏移量生成的矩阵乘以当前矩阵。当参数是(0.0,0.0,0.0)时,表示对函数glTranslate*()的操作是单位矩阵,也就是对物体没有影响。

3.2.2 旋转变换

旋转变换函数如下:

Void glRota{fd}TYPE angle, TYPE x, TYPE y, TYPE z);

函数中第一个参数是表示目标沿从点(x,y,z)到原点方向逆时针旋转的角度,后三个参数是旋转的方向点坐标。这个函数表示用这四个参数生成的矩阵乘以当前矩阵。当角度参数是0.0时,表示对物体没有影响。3.2.3 比例变换

比例变换函数如下:

Void glScale{fd}(TYPE x, TYPE y, TYPE z);

单个函数参数值就是目标分别沿三个轴方向缩放的比例因子。这个函数表示用这三个比例因子生成的矩阵乘以当前矩阵。这个函数能完成沿相应的轴对目标进行拉伸、压缩和反射三项功能。以参数x为例,若当x大于1.0时,表示沿x方向拉伸目标;若x小于1.0,表示沿x轴方向收缩目标;若x=-1.0表示沿x轴反射目标。其中参数为负值时表示对目标进行相应轴的反射变换。

四、总体设计与功能实现

4.1 主要界面设计

4.2 设置颜色界面

4.2.1 界面设置代码:

void CGraphicsView::OnClock(){ WHAT_TO_DO=ID_CLOCK;

clean();int xx = 450, yy = 300, r = 150,d = 5;int i, white = RGB(255,255,255);mile(xx, yy, r, COLOR);Matrix m(xx, 240), s(xx, 200);Matrix t1(xx, yy, true), t2(-xx,-yy, true), mr(PI/1800), sr(PI/30);mile(m.getx(), m.gety(), d+1, COLOR);mile(s.getx(), s.gety(), d, COLOR);dne(m.getx(), m.gety(), xx, yy, COLOR);dne(s.getx(), s.gety(), xx, yy, COLOR);

for(i=0;i<120;i++){

::Sleep(80);

mile(m.getx(), m.gety(), d+1, white);mile(s.getx(), s.gety(), d, white);dne(m.getx(), m.gety(), xx, yy, white);dne(s.getx(), s.gety(), xx, yy, white);m = t1*mr*t2*m;s = t1*sr*t2*s;mile(m.getx(), m.gety(), d+1, COLOR);mile(s.getx(), s.gety(),d, COLOR);dne(m.getx(), m.gety(), xx, yy, COLOR);dne(s.getx(), s.gety(), xx, yy, COLOR);}} 4.2.2 点击“设置--颜色”后,运行结果如下:

4.3 二维线画图元实现

4.3.1 实现代码:

void CGraphicsView::MidCir(CDC *pdc, int x0, int y0, int x1, int y1, int color){ int r,x,y,deltax,deltay,d;r=sqrt(((double)x1-(double)x0)*((double)x1-(double)x0)+((double)y1-(double)y0)*((double)y1-(double)y0));x=0;y=r;deltax=3;deltay=2-r-r;d=1-r;while(x<=y){ ::Sleep(time);

pdc->SetPixel(x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixel(-x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixel(x+x0,-y+y0,color);

::Sleep(time);

pdc->SetPixel(-x+x0,-y+y0,color);

::Sleep(time);

pdc->SetPixel(y+x0,x+y0,color);

::Sleep(time);

pdc->SetPixel(-y+x0,x+y0,color);

::Sleep(time);

pdc->SetPixel(y+x0,-x+y0,color);

::Sleep(time);

pdc->SetPixel(-y+x0,-x+y0,color);

if(d<0)

{ d+=deltax;

deltax+=2;

x++;}

else

{ d+=deltax+deltay;

deltax+=2;

deltay+=2;

x++;

y--;}}} void CGraphicsView::midellispse(int xx, int yy, int r1, int r2, int color){ } void CGraphicsView::Ellipse(CDC *pdc, int x1, int y1, int x2, int y2, int color){

xx0=(x2+x1)/2;yy0=(y2+y1)/2;rra=abs(x2-x1)/2;rrb=abs(y2-y1)/2;if(rra==0 && rrb==0)return;Ellipse0(pdc,xx0,yy0,rra,rrb,color);} void CGraphicsView::Ellipse0(CDC *pdc, int x0, int y0, int a, int b, int color){

int i,yy;int x,y,deltax,deltay;int aa,aa2,aa3,bb,bb2,bb3;double d1,d2;aa=a*a;aa2=aa*2;aa3=aa*3;bb=b*b;bb2=bb*2;bb3=bb*3;x=0;y=b;d1=bb+aa*(-b+0.25);deltax=bb3;deltay=-aa2*b+aa2;pdc->SetPixelV(x+x0,y+y0,color);pdc->SetPixelV(x+x0,-y+y0,color);while(bb*(x+1)

yy=y;

if(d1<0)

{ d1+=deltax;

deltax+=bb2;

x++;}

else

{

d1+=deltax+deltay;

deltax+=bb2;

deltay+=aa2;

x++;

y--;}

::Sleep(time);

pdc->SetPixelV(x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixelV(-x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixelV(x+x0,-y+y0,color);

::Sleep(time);

pdc->SetPixelV(-x+x0,-y+y0,color);} d2=bb*(x+0.5)*(x+0.5)+aa*(y-1)*(y-1)-aa*bb;deltax-=bb;deltay+=aa;while(y>0){ if(d2<0)

{ d2+=deltax+deltay;

deltax+=bb2;

deltay+=aa2;

x++;

y--;}

else

{ d2+=deltay;

deltay+=aa2;

y--;}

::Sleep(time);

pdc->SetPixelV(x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixelV(-x+x0,y+y0,color);

::Sleep(time);

pdc->SetPixelV(x+x0,-y+y0,color);

::Sleep(time);

pdc->SetPixelV(-x+x0,-y+y0,color);}} void CGraphicsView::DDALine(CDC *pdc, int x0, int y0, int x1, int y1, int color){ int xx,yy,s,s1,s2,di;float dx,dy,k,x,y;dx=x1-x0;if(dx>=0)

s1=1;else

s1=-1;dy=y1-y0;if(dy>=0)

s2=1;else s2=-1;dx=abs(dx);dy=abs(dy);if(dx>=dy){

s=0;

di=(int)dx;

k=dy/dx*s2;} else { s=1;

di=(int)dy;

k=dx/dy*s1;} x=x0;y=y0;for(int i=0;i<=di;i++){if(s==0)

{

xx=(int)x;

yy=(int)(y+0.5);

::Sleep(time);

pdc->SetPixel(xx,yy,color);

x+=s1;

y+=k;}

else{

xx=(int)(x+0.5);

yy=(int)y;

::Sleep(time);

pdc->SetPixel(xx,yy,color);

y+=s2;

x+=k;}}} 4.3.2 点击二维线画图元,课相应画出直线、圆和椭圆,结果如下:

4.4 画多边形功能的实现

4.4.1 部分实现代码:

void CGraphicsView::OnDrawDuoBX(){ Vertex_Count dlg;if(dlg.DoModal()==IDOK){ if(dlg.m_vertex_count>MAX)

{ MessageBox(“输入顶点数过大”);

return;}

VertexTotal=dlg.m_vertex_count;

CDC *pDC=GetDC();

CPen pen(PS_SOLID,2,RGB(255,255,255));

CPen *pOldpen=pDC->SelectObject(&pen);

pDC->MoveTo((int)(inVertexArray[0].x+0.5),(int)(inVertexArray[0].y+0.5));

int i;

for(i=1;i

pDC->LineTo((int)(inVertexArray[i].x+0.5),(int)(inVertexArray[i].y+0.5));

pDC->LineTo((int)(inVertexArray[0].x+0.5),(int)(inVertexArray[0].y+0.5));

pDC->SelectObject(pOldpen);

ReleaseDC(pDC);

inLength=0;

outLength=0;

WHAT_TO_DO=ID_DrawDuoBX;}}

4.4.2 点击多边形,输入定点个数,可绘制出相应的多边形,结果如下:

4.5 画Bezier曲线功能的实现

4.5.1 部分实现代码:

void CGraphicsView::OnBezier(){ // TODO: Add your command handler code here WHAT_TO_DO=ID_BEZIER;CDC *p=GetDC();

p->TextOut(10, 20, “PS:鼠标左键添加曲线,鼠标右键修改曲线.”);

ReleaseDC(p);} void CGraphicsView::OnBezierClear(){ n =-1;RedrawWindow();} void CGraphicsView::DrawBezier(DPOINT *p){ if(n <= 0)return;if((p[n].x < p[0].x+1)&&(p[n].x > p[0].x-1)&&(p[n].y < p[0].y+1)&&(p[n].y > p[0].y-1)){ pDC->SetPixel(p[0].x, p[0].y, COLOR);

return;} DPOINT *p1;p1 = new DPOINT[n+1];int i, j;p1[0] = p[0];for(i=1;i<=n;i++){ for(j=0;j<=n-i;j++)

{ p[j].x =(p[j].x + p[j+1].x)/2;

p[j].y =(p[j].y + p[j+1].y)/2;}

p1[i] = p[0];} DrawBezier(p);DrawBezier(p1);delete p1;} void CGraphicsView::OnBezierAdd(){ AddorMove = 1;} void CGraphicsView::OnBezierMove(){ AddorMove =-1;} void CGraphicsView::OnMouseMove(UINT nFlags, CPoint point){ switch(WHAT_TO_DO){ case ID_BEZIER:

{ if(current >= 0){ points[current].x = point.x;

points[current].y = point.y;

RedrawWindow();} if(current2 >= 0)

{ points[current2].x = point.x;

points[current2].y = point.y;

RedrawWindow();}

break;} default:break;} CView::OnMouseMove(nFlags, point);} 4.5.2 点击曲线--Beizer曲线,可实现Beizer曲线的绘制功能,绘制结果如下图:

图 1 图 2

4.5.3 点击曲线--Beizer曲线,可实现Beizer曲线的移动,鼠标点击其中的任一点,可实现曲线的移动,绘制结果如下图:

上图1移动后的曲线

上图2移动后的曲线 4.6 二维图形变换的实现

可以实现一椭圆在界面上的随机移动,一圆在界面上饶某一点的旋转和一正方形由大变小在变大的变化,部分实现代码如下: void CGraphicsView::OnXuanzhuan(){ WHAT_TO_DO=ID_XUANZHUAN;

time=0;

OnClear();

CClientDC dc(this);CDC* pDC=&dc;

int i, white=RGB(255,255,255), point [2][2]={{300,200},{300,250}};

Matrix a(point[0][0],point[0][1]), b(point[1][0],point[1][1]);

int midx=(point[0][0]+point[1][0])/2,midy=(point[0][1]+point[1][1])/2;

Matrix t1(midx, midy,true), t2(-midx,-midy,true);

Matrix r(PI/50);

Matrix temp(midx, midy,true);

temp = t1*r*t2;

for(i=0;i<200;i++){

::Sleep(50);

MidCir(pDC, a.getx(), a.gety(), b.getx(), b.gety(), white);

a = temp*a;

b = temp*b;

MidCir(pDC, a.getx(), a.gety(), b.getx(), b.gety(), COLOR);}

for(i=0;i<200;i++){

::Sleep(50);

MidCir(pDC,a.getx(), a.gety(), b.getx(), b.gety(), white);

a = temp*a;

b = temp*b;

MidCir(pDC, a.getx(), a.gety(), b.getx(), b.gety(), COLOR);}

time=5;} void CGraphicsView::OnUpdateXuanzhuan(CCmdUI* pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_XUANZHUAN);} void CGraphicsView::OnScale(){ WHAT_TO_DO=ID_SCALE;

OnClear();CClientDC dc(this);CDC* pDC=&dc;

time=0;int i,white=RGB(255,255,255), point[4][2]={{300,250},{400,250},{300,300},{400,300}};float sx=0.9,sy=0.85;int midx=(point[0][0]+point[3][0])/2,midy=(point[0][1]+point[3][1])/2;Matrix s1(sx,sy),s2(1/sx,1/sy);Matrix t1(midx, midy,true), t2(-midx,-midy,true);

Matrix a(point[0][0],point[0][1]), b(point[1][0],point[1][1]);Matrix c(point[2][0],point[2][1]), d(point[3][0],point[3][1]);Matrix temp(midx, midy,true);temp = t1*s1*t2;DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR);DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR);DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR);DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR);for(i=0;i<20;i++){

::Sleep(30);

DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),white);

DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),white);

DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),white);

DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),white);

a=temp*a;

b=temp*b;

c=temp*c;

d=temp*d;

DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR);

DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR);

DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR);

DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR);} temp = t1*s2*t2;for(i=0;i<20;i++){

::Sleep(30);

DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),white);

DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),white);

DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),white);

DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),white);

a=temp*a;

b=temp*b;

c=temp*c;

d=temp*d;

DDALine(pDC,a.getx(),a.gety(),b.getx(),b.gety(),COLOR);

DDALine(pDC,a.getx(),a.gety(),c.getx(),c.gety(),COLOR);

DDALine(pDC,c.getx(),c.gety(),d.getx(),d.gety(),COLOR);

DDALine(pDC,d.getx(),d.gety(),b.getx(),b.gety(),COLOR);} time=5;} void CGraphicsView::OnUpdateScale(CCmdUI* pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_SCALE);} 4.7 三维图形的变换

主要实现三维图形的上下左右平移,分别绕X轴Y轴Z轴的旋转,放大和缩小,以及正方体六个面的颜色变换,除此之外,还可以选择背景颜色的改变 4.7.1 部分代码如下:

void CGraphicsView::OnAoduomianti(){ WHAT_TO_DO=ID_AODUOMIANTI;CDrawDLG dlg1;dlg1.DoModal();} void CGraphicsView::OnUpdateAoduomianti(CCmdUI* pCmdUI){ pCmdUI->SetCheck(WHAT_TO_DO==ID_AODUOMIANTI);} void CDrawDLG::OnPaint()

{ CPaintDC dc(this);// device context for painting CWnd *pWnd=GetDlgItem(IDC_DRAW);pWnd->UpdateWindow();// CDC *PDC=pWnd->GetDC();Draw();} void CDrawDLG::Draw(){ CWnd *pWnd=GetDlgItem(IDC_DRAW);pWnd->UpdateWindow();CDC *pDC=pWnd->GetDC();CRect rect;pWnd->GetClientRect(rect);D v[8]={ {-fs,-fs,fs},{-fs,fs,fs},{fs,fs,fs},{fs,-fs,fs},{-fs,-fs,-fs},{-fs,fs,-fs},{fs,fs,-fs},{fs,-fs,-fs} },d[8];

POINT p0[4],p1[4],p2[4],p3[4],p4[4],p5[4],w[8];int z[8];

for(int i=0;i<8;i++){ d[i].x=v[i].x;

d[i].y=(int)(v[i].y*cos(a*DU)-v[i].z*sin(a*DU));

d[i].z=(int)(v[i].y*sin(a*DU)+v[i].z*cos(a*DU));

v[i].x=(int)(d[i].x*cos(b*DU)+d[i].z*sin(b*DU));

v[i].y=d[i].y;

v[i].z=(int)(d[i].z*cos(b*DU)-d[i].x*sin(b*DU));

d[i].x=(int)(v[i].x*cos(c*DU)-v[i].y*sin(c*DU));

d[i].y=(int)(v[i].x*sin(c*DU)+v[i].y*cos(c*DU));

d[i].z=v[i].z;

w[i].x=d[i].x+cx;

w[i].y=d[i].y+cy;

z[i]=d[i].z;} p0[0]=w[0];p0[1]=w[1];p0[2]=w[2];p0[3]=w[3];p1[0]=w[4];p1[1]=w[5];p1[2]=w[6];p1[3]=w[7];

p2[0]=w[0];p2[1]=w[1];p2[2]=w[5];p2[3]=w[4];p3[0]=w[1];p3[1]=w[2];p3[2]=w[6];p3[3]=w[5];p4[0]=w[2];p4[1]=w[3];p4[2]=w[7];p4[3]=w[6];p5[0]=w[0];p5[1]=w[3];p5[2]=w[7];p5[3]=w[4];switch(Maxnum(z,7)){ case 0:fill(p0,p2,p5,0,2,5);break;

case 1:fill(p0,p2,p3,0,2,3);break;

case 2:fill(p0,p3,p4,0,3,4);break;

case 3:fill(p0,p4,p5,0,4,5);break;

case 4:fill(p1,p2,p5,1,2,5);break;

case 5:fill(p1,p2,p3,1,2,3);break;

case 6:fill(p1,p3,p4,1,3,4);break;

case 7:fill(p1,p4,p5,1,4,5);break;}} BOOL CDrawDLG::OnInitDialog(){ CDialog::OnInitDialog();m_scroll1.SetScrollRange(-180,180);m_scroll1.SetScrollPos(0);m_scroll2.SetScrollRange(-180,180);m_scroll2.SetScrollPos(0);m_scroll3.SetScrollRange(-180,180);m_scroll3.SetScrollPos(0);m_scroll4.SetScrollRange(0,350);m_scroll4.SetScrollPos(200);m_scroll5.SetScrollRange(0,300);m_scroll5.SetScrollPos(115);m_scroll6.SetScrollRange(0.00,300.00);m_scroll6.SetScrollPos(50.00);a=b=c=0;fs=50.00;SetTimer(1,100,NULL);Ctrl=0;cx=200;cy=115;COLOR1=RGB(123,234,43);COLOR2=RGB(123,123,0);COLOR3=RGB(123,24,235);COLOR4=RGB(0,123,95);COLOR5=RGB(23,234,34);COLOR6=RGB(234,124,0);COLOR7=RGB(0,43,98);return TRUE;// return TRUE unless you set the focus to a control} void CDrawDLG::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ int nID=pScrollBar->GetDlgCtrlID();switch(nID){ case IDC_SCROLLBAR1: a=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: a--;break;

case SB_LINERIGHT: a++;break;

case SB_PAGELEFT: a-=10;break;

case SB_PAGERIGHT: a+=10;break;

case SB_THUMBTRACK: a=nPos;break;}

if(a<-180)a=180;

if(a>180)a=-180;

pScrollBar->SetScrollPos(a);

break;case IDC_SCROLLBAR2: b=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: b--;break;

case SB_LINERIGHT: b++;break;

case SB_PAGELEFT: b-=10;break;

case SB_PAGERIGHT: b+=10;break;

case SB_THUMBTRACK: b=nPos;break;}

if(b<-180)b=180;

if(b>180)b=-180;

pScrollBar->SetScrollPos(b);

break;case IDC_SCROLLBAR3: c=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: c--;break;

case SB_LINERIGHT: c++;break;

case SB_PAGELEFT: c-=10;break;

case SB_PAGERIGHT: c+=10;break;

case SB_THUMBTRACK: c=nPos;break;}

if(c<-180)c=180;

if(c>180)c=-180;

pScrollBar->SetScrollPos(c);

break;case IDC_SCROLLBAR4: cx=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: cx--;break;

case SB_LINERIGHT: cx++;break;

case SB_PAGELEFT: cx-=10;break;

case SB_PAGERIGHT: cx+=10;break;

case SB_THUMBTRACK: cx=nPos;break;}

if(cx<0)cx=200;

if(cx>350)cx=200;

pScrollBar->SetScrollPos(cx);

break;case IDC_SCROLLBAR5: cy=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: cy--;break;

case SB_LINERIGHT: cy++;break;

case SB_PAGELEFT: cy-=10;break;

case SB_PAGERIGHT: cy+=10;break;

case SB_THUMBTRACK: cy=nPos;break;}

if(cy<0)cy=300;

if(cy>300)cy=0;

pScrollBar->SetScrollPos(cy);

break;

case IDC_SCROLLBAR6: fs=pScrollBar->GetScrollPos();

switch(nSBCode)

{ case SB_LINELEFT: fs--;break;

case SB_LINERIGHT: fs++;break;

case SB_PAGELEFT: fs-=0.55;break;

case SB_PAGERIGHT: fs+=0.55;break;

case SB_THUMBTRACK: fs=nPos;break;}

if(fs<0)fs=50;

if(fs>300)fs=50;

pScrollBar->SetScrollPos(fs);

break;// UpdateData(FALSE);} // Invalidate();Draw();CDialog::OnHScroll(nSBCode, nPos, pScrollBar);} void CDrawDLG::OnOK(){ KillTimer(1);

CDialog::OnOK();} int CDrawDLG::Maxnum(int *p, int n){ int max=p[0];int x;for(int i=0;i<=n;i++){

if(max<=p[i])

{ max=p[i];x=i;} } return x;} void CDrawDLG::fill(POINT *x, POINT *y, POINT *z, int i,int j,int q){ CWnd *pWnd=GetDlgItem(IDC_DRAW);pWnd->UpdateWindow();CDC *pDC=pWnd->GetDC();CRect rect;pWnd->GetClientRect(rect);

CDC dcmem;dcmem.CreateCompatibleDC(pDC);CBitmap bmp,*oldbmp;bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());oldbmp=dcmem.SelectObject(&bmp);CBrush brush[6];brush[0].CreateSolidBrush(COLOR1);brush[1].CreateSolidBrush(COLOR2);brush[2].CreateSolidBrush(COLOR3);brush[3].CreateSolidBrush(COLOR4);brush[4].CreateSolidBrush(COLOR5);brush[5].CreateSolidBrush(COLOR6);CBrush *oldbrush=dcmem.SelectObject(&brush[i]);dcmem.FillSolidRect(rect,COLOR7);dcmem.Polygon(x,4);dcmem.SelectObject(&brush[j]);dcmem.Polygon(y,4);dcmem.SelectObject(&brush[q]);dcmem.Polygon(z,4);dcmem.SelectObject(oldbrush);for(int b=0;b<6;b++)brush[b].DeleteObject();pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(), &dcmem,0,0,SRCCOPY);dcmem.SelectObject(oldbmp);bmp.DeleteObject();dcmem.DeleteDC();} 4.7.2 运行结果如下:

(1)实现多面体的上下左右平移(2)实现多面体的绕轴旋转:

(3)实现多面体的放大缩小:

(4)实现多面体及背景的颜色设置:

(5)三维图形变换整体图形

五、实验心得体会

在本次课程设计过程中,基本掌握了计算机图形学关于图形绘制变换的基础知识,DDA法画直线和中心点法画圆及椭圆的方法,还对图形的变换及需要用到的一系列的函数有了相应的理解,也了解的很多有关于图形学中三维图形的变换的知识。不过都只是皮毛而已,从中锻炼了自己的动手做实验的能力,但同时也让自己看清了自己的水平,以便在以后的生活里多加强有关这方面的学习,从而提升自己在图形学方面的知识水平。

在本次课程设计中,设计方案存在着很多的死板化的实现方法,也是很不人性化的一点,只提供了画一种曲线的方法,且画出的曲线只能移动,此为本次设计方案的不足之一;然后就是能实现曲面和多边形的绘制,却没有对应的实现绘制好图形后直接对其进行平移、选择等变换,此为设计方案不足之二。再者就是三维图形只能实现变换不能实现绘制,此为设计方案不足之三。鉴于个人能力真的有限,所以只能设计出此种级别的效果了。因为实验重要的只是思想过程,效果的不美观只能是因为学习的知识还远远不够,所以不能设计出完美的全面的图形绘制变换程序。

计算机图形学课程报告 篇2

计算机图形学是计算机科学研究领域中的一门重要学科, 同时也是建立在传统图学理论、应用数学及计算机科学基础上的一门交叉学科[1]。它利用计算机处理图形信息, 主要包括图形信息的表示、输入输出与显示、图形的几何变换及人机交互绘图等方面的技术[2]。在过去的几十年里, 图形学不仅在理论研究方面取得较大的进步, 在实际应用领域如计算机辅助设计与制造、计算机动画艺术、虚拟现实等方面均得到了广泛的应用与推广。基于计算机图形学领域内出现的巨大变化及本校数字媒体技术专业人才培养目标的确立, 有必要对目前的计算机图形学实验教学过程进行进一步改革, 从而提升这门课程的实验教学水平。

1 实验教学现状

由于计算机图形学是一门建立在多门学科之上的综合性交叉学科, 它所涉及到的算法基本以数学为基础, 其中部分算法为了追求高效的运算速度及优化的存储空间, 在教材中的描述与实现也相对较为复杂。考虑到这些因素, 教师们通常会避开讲解过多依赖数学基础的算法或者描述及实现起来较为复杂的算法, 仅仅从对一些简单算法进行编程实现的角度来组织实验教学, 这样做势必会影响到最终的实践教学效果。

同时, 在设计实验课程的环节中, 很多教师并没有充分考虑到实验项目的应用背景。他们只要求学生对一些自己认为重要的算法进行简单的编程实现, 这样做使得原本很重要的实验环节变成了理论学习的辅部助分, 学生很难将所掌握的基本理论知识与相关应用领域建立起联系, 更谈不上灵活应用与创新。

2 实验教学方法改进

由于计算机图形学是一门实践性、应用性较强的学科, 所以在日常的教学过程中需要不断强化实验环节[3], 要求学生把所学的基础理论知识应用到操作实践中, 并在操作实践过程中不断地发现、分析和解决新问题[4]。为了实现上述目标, 教师在教学过程中必须要结合图形学理论教学过程, 努力改进教学方法。

2.1 上好第一堂实验课

在本学科的第一次实验课堂上用1课时的时间适当引入虚拟现实技术、计算机三维动画等较前沿的应用领域。以《冰河世纪》、《阿凡达》等经典3D影片为例, 向学生展示计算机图形学应用成果, 并简单介绍实现这些成果所用到的图形软件及实现这些软件所涉及到的图形学技术 (如三维建模、材质、渲染等) , 最后向学生详细介绍本学科的实验课程设置。这一举措将有助于激发学生浓厚的学习兴趣, 同时也将克服长久以来植根于学生心中“图形学学而无用”的心理障碍。

2.2 算法讲解与算法演示相结合

为了让艰涩难懂的算法讲解变得生动并易于理解, 可以将算法原理通过Flash软件制作成动画演示给学生看[5], 如图1所示为使用Flash制作的直线剪裁算法演示动画。但是由于Flash编程能力有限, 仅能呈现简单算法的演示效果, 对于一些复杂的算法 (如真实感图形显示) , 则可以采用微软图形库OpenGL并结合VC++6.0进行演示[6], 在演示的过程中还可以灵活修改参数观察不同的实验结果。如图2所示为使用OpenGL制作的具备真实感图形效果的茶壶模型。实践证明, 以上所采用的讲授方式直观并易于理解, 可以充分激发学生的实验兴趣。

2.3“编程实践”、“图形软件应用”和“理论学习”三结合

计算机图形学的学习目标是要求学生掌握及应用本课程相关算法解决实际问题。基于这一目标, 教师可以采用“编程实践”、“图形软件应用”和“理论学习”三结合的方法组织实验教学内容。譬如, 在讲解“光照处理”这一理论知识点之前, 首先在实验课堂上给学生演示如何在图形软件3D Max中制作光源, 让学生通过修改参数观察光照效果, 在此过程中, 学生会产生诸如“各参数具备何含义”、“不同参数的设置具备何作用”等疑问。接着, 教师让学生使用微软图形库OpenGL结合VC++6.0编程实现预定的光照效果, 再提出相同的疑问。带着这些疑问, 教师在课堂上为学生讲解图形学中“光照处理”这一理论知识点, 引导学生回到光照模型的理论学习阶段。教学实践证明, 通过上述方法及实验过程, 学生可以将理论和实践很好地融合到一起, 真正解决了长久以来存在于他们心中诸如“学这个知识有什用”、“参数到底表示什么”、“为什么要那样设置”等疑问, 从而进一步明确了学生的学习目标, 极大地提高了其学习兴趣及学习效率。

2.4 教学与科研相结合

科研是提高课程教学质量的源动力, 高校教师可以将本课程相关的科研成果引入课堂, 这样既丰富了教学内容, 也提高了学生的学习兴趣。教师在课外可以将学生组织起来, 成立科技创新小组, 通过阅读文献、参与科研讲座等方式将其逐步引入到科研创新过程中来[7]。作者曾指导一个本科生科技创新小组, 主要工作是实现基于二维灰度图像的形体三维重建, 这一部分内容源于图形学课程中的“从二维图像信息构造三维形体”, 通过一学期的努力, 学生们利用所掌握的图形学知识, 设计算法并编程实现了如图3所示的“基于旋转轴的形体三维重建”。目前, 该科技小组的成员已经进入毕业设计阶段, 在本阶段他们将会继续探索“如何基于形体的轮廓线实现三维重建”。显而易见, 通过采用如上所述的教学与科研相结合的方法, 真正地实现了教师“教学与引导”、学生“学习与创新”的双重结合。

2.5 注重实验教学过程考核

在计算机图形学的教学过程中应当注重课程的考核管理, 它是保证教学质量的重要手段。教师可以将考核过程分为两个阶段:平时阶段和期末阶段。期末阶段可以沿用传统“笔试成绩+平时成绩”的模式, 而平时阶段的考核力度需要进一步加大。在教学改革的过程中, 将实验课堂的上机考核作为主要的平时成绩记入学习过程, 每次实验都给出等级, 并按比例记入到课程的总成绩中。借助于上机考核这一手段, 充分调动起学生动手实践的积极性, 提升学生在实践过程中独立思考、独立解决问题的能力。通过对不同教学实践过程的考核成果进行对比分析, 发现以上考核方法的实施的确起到了显著的效果。

3 实验教学内容设置

实验内容的合理设置在教学过程中是一个非常重要的环节, 每一个实验项目的设置都应当与实际应用背景相联系, 让学生感觉到“所学即所用”, 这样会极大提高学生的学习积极性。

3.1 实验环境设置

传统的实验过程采用Visual C++6.0作为开发环境, 在这种环境下, 只能进行一些简单的图形算法编程 (如二维图形生成、区域填充、图形变换等) 。针对以上情况, 在图形学实验中引入了OpenGL, 所有的实验项目都要求在安装了GLUT的Visual C++6.0环境下进行。OpenGL是独立于操作系统和硬件环境的三维图形软件库, 其所具备的功能基本上涵盖了计算机图形学所要包括的各方面内容。利用OpenGL开展图形学实验, 有益于提高学生在计算机图形学方面的程序开发能力[8,9]。

3.2 实验环节设置

本课程的实践过程主要包含如下3个环节:基础算法的OpenGL实现、OpenGL提高实验、图形学软件产品体验。

(1) 基础算法的OpenGL实现环节。采用OpenGL结合Visual C++6.0实现图形的绘制、变换及真实感显示等基本功能, 这一过程的设置使学生从繁琐的算法编程中摆脱出来, 让其更多地接触实际开发所使用的工具与开发环境。

(2) OpenGL提高实验环节。通过调用及组织OpenGL库函数来完成某一具体案例 (如三维场景中人物模型的真实感显示) , 使学生直接面向图形学的实际应用过程。

(3) 图形学软件产品体验环节。以图形学软件产品3D Max作为建模工具, 结合OpenGL和图像处理软件Photoshop, 根据可选课题设计相关应用案例。通过对3D Max的使用, 让学生感受到计算机图形学的实际应用背景, 分析图形学在诸如此类软件产品中的具体应用。

3.3 实验项目设置

根据上述实验过程的设置, 将实验项目安排如表1所示。其中, 验证性实验属于基础算法的OpenGL实现环节;综合性实验是对学生实验技能和方法进行综合训练的一种复合型实验, 属于OpenGL提高实验环节;而设计性实验属于图形学软件产品体验环节, 要求学生自主选题、设计实验方案, 充分利用所学知识结合图形学软件产品完成案例的制作。

4 结语

基于本校数字媒体技术专业计算机图形学实验教学实际情况, 立足于“应用型人才培养”模式, 对实验教学方法及内容设置进行了改革。同时, 对实验的环境、内容及实验项目重新作出设置与安排。实践表明, 本文提出的方法对加深课程理解、培养学生兴趣和提高教学质量有显著的效果。

参考文献

[1]李春雨.计算机图形学理论与实践[M].北京:北京航空航天大学出版社, 2004.

[2]倪明田, 吴良芝.计算机图形学[M].北京:北京大学出版社, 1999.

[3]刘晋钢, 孔令德, 王进忠.“计算机图形学”课程新教学模式的研究与实践[J].计算机教育, 2010 (3) :63-65.

[4]何援军.论计算机图形学的若干问题[J].上海交通大学学报, 2008 (4) :514-517.

[5]伍军云, 徐少平, 占传杰.基于OpenGL的计算机图形学辅助教学课件[J].计算机与现代化, 2007 (9) :114-119.

[6]费广正, 乔林.Visual C++6.0高级编程技术——OpenGL篇[M].北京:中国铁道出版社, 2000.

[7]黄琼.在计算机应用类课程中开展研究性学习的探索[J].南宁职业技术学院学报, 2005 (1) :42-44.

[8]杜利峰, 李竹林.基于OpenGL的计算机图形学教学改革探索[J].电子设计工程, 2012 (13) :6-8.

计算机图形学教学改革浅论 篇3

摘 要: 由于计算机图形学是一门交叉学科,对老师和学生的要求都比较高,但是这门课用途广,应用也广,对学生的益处大,所以不少学校开设这门课。作者结合教学经验总结了一些促进课堂教学改革的方法,学生课堂反应效果良好。

关键词: 计算机图形学 教学改革 案例教学

1.引言

经过几十年的发展,计算机图形学已经成为集多种学科于一体的教全面的学科。计算机图形学的主要研究内容就是怎么在计算机中表示图形、利用计算机进行图形的计算、处理和显示的相关原理与算法。

2.课程教学的现状与问题

本课程讲授计算机图形学的有关理论、方法及编程技术,内容包括二维图形的生成及变换,样条曲线,三维图形几何造型及真实感图形生成,二维及三维图形编程。通过本课程的学习使学生掌握各种主要的图形生成及处理的原理和算法,掌握基本的图形编程技术,为今后从事相关的软硬件开发工作提供基础,并培养学生在算法研究方面的基本素养,提高学生的程序设计能力。

计算机图形学这门课程是很难理解的,不仅需要相关的数学知识,还需要有算法的思路,要学过计算机的编程语言,是一门交叉课程。这门课对老师的要求比较高,对学生的能力要求比较高。这门课是老师难上得好,学生不容易听得懂。所以本课程总学时48课时,其中安排实验12课时,主要是在C++6.0中安装OpenGL,在此环境中进行代码验证一些计算机图形学的算法。一方面学习了C++代码在实践应用中代码的编写,另一方面进一步对计算机图形学的相关算法和理论进行了验证和理解。

3.教学方法改革

(1)基础内容重点反复讲:对实质引入该门课程的基础内容重点逐步反复讲,在数学上直线是点的集合.在几何学中直线被定义为两个点之间的最短距离。也就是说一条直线是指所有在它上面的点的集合,直线是一维的,即它们具有长度但没有维数。但是图形学中的直线的概念,其一条线段就是由一些连续可见的像素所组成的。一再强调是像素,并且讲像素的概念。这个直线的概念和学生以前在数学上学习的概念不同,不讲清楚直线和像素的关系,对于该课程的其他内容学生根本就没法理解。

(2)提高学生学习该门课程的兴趣:计算机图形学虽然比较难,课程难上,但是只要能讲明白,学生听懂了,就不容易忘记。但是由于比较枯燥,怎么引发学生学习和听课的兴趣则是一个关键。加强提问,讲一点新内容,提问一次,让学生复述出来。学生基础打牢了,逐渐发现这门课有意思了。

(3)大量举实际案例讲解:如增量算法中,对于该算法怎么算出来的,就举了个实例,如怎么划直线段P0(0,0)到P1(5,2),一讲实例,学生对于刚才讲的增量算法的算法过程就明白了。在讲每个算法后,都举一个到几个实例,慢慢分析,学生就听明白了,并且越来越感兴趣。

(4)加入板书:由于大量举实例,为了使学生明白每一步算法是怎么来的,要用板书讲解实例。只有经过这样一步步的计算,学生的思路才能跟上老师的讲解速度,如果全部都用PPT讲述,速度太快,学生就可能对案例分析的速度跟不上。

(5)PPT加入动画:由于计算机图形学课程比较枯燥,每张PPT都有动画,能够吸引学生的注意,符合当代大学生喜欢高科技喜欢新生事物的心理。

(6)加强课堂中与学生的交流:学生对老师要求比较高,师生在课程教学中要不断交流。这里主要有眼神的交流,在上这门课时不断留心学生对授课的反应,如果发现不明白,就在深化后讲一遍,同时可以让学习成绩比较好的同学讲讲理解,这样全班学生的注意力都全部集中在课堂上了。

(7)讲课时注意运用语言的魅力。讲课要抑扬顿挫,注意语气的运用,有舒有缓,有急有慢,充分利用声音和语言的魅力,将学生吸引到课堂上,这样一堂课不仅效率高,学生还记得很牢。

(8)讲解代码加深学生对算法的认识。大四学生已学习了两种以上的编程语言,通过讲解该课程的代码,不仅复习了编程语言,而且加深了对算法内容的认识,从不同角度分析了算法,学生如果以后工作中用到该算法,不仅理解并记得还可以写出代码,符合计算机专业培养的目标。

(9)改写代码训练学生的实践能力。通过书上给的现成代码进行演练后,在学生已经掌握的基础上,要求学生改写该算法或者理论代码,一般都不仅书上这一种代码可实现。通过一步步引领学生改写代码,学生的代码实践能力得到了迅速提高。

(10)复习相关的数学知识。在授课过程中发现学生在大学数学基础课中的数学知识理解得不透所以记得不牢靠,有必要对计算机图形学要运用较多的矩阵知识进行提高性的复习。如对矢量和矩阵的知识进行复习,特别是对矩阵乘法进行重点复习。

4.结语

通过对这门课程的认真研究,积极准备想尽办法,充分利用一切教学手段加上大量举例,使这门课上得生动易理解,学生爱上课,上课积极听课,并且能够积极回答课堂提问,补充回答问题的同学也很多,课堂气氛很好,学习气氛浓烈,达到了预期的教学目的。

参考文献:

[1]王振武.计算机图形学基础[M]北京:清华大学出版社,2011.

计算机图形学上机心得2 篇4

上机心得

指导教师:姓 名:学 号:何朝良 王奎

10260107

计算机图形学是利用计算机研究图形的表示、生成、处理和显示的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。经过30多年的发展,计算机图形学已成为计算机科学中最为活跃的分支之一,并得到广泛的应用。

在科技高度发展的今天,计算机在人们之中的作用越来越突出。而C语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,更好的学习计算机图形学。因此,C语言对我们计算机图形学的学习尤其重要,而我们也需要一定的C语言基础知识。

在这个学期里,我们班级的学生在计算机图形学老师何老师的带领下进行了计算机图形学的上机实践学习。在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解和掌握,这对我们计算机图形的学习打下了良好的基础。但是,万事开头难,在计算机图形学的上机实践的过程中还是遇到了一些问题。

上机实验是学习计算机图形学必不可少的实践环节,上课学习到的知识都需要通过C语言编程做出程序来真正掌握它。对于计算机图形学的学习目的,可以概括为图形的表示、图形的生成、图形的处理和显示,这些都必须通过充分的实际上机操作才能完成。我们上机实验总共包括七个,每个实验之前老师都会给我们做详细的介绍,具体的操作步骤老师也给了一个参考书,这样的话,我们在上机过程中也省去了很多麻烦,节约了很多时间。因此,我们才有了充裕的时间来理解实验原理,并结合自己的想象力,编写出属于自己的程序。

学习计算机图形学除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。因为学时所限,课程安排在周四晚上统一上机实验,所以我们需要有效地利用上机实验的机会,尽快掌握理解计算机图形学的基础知识,为今后的继续学习打下一个良好的基础。课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:

加深对课堂讲授内容的理解

课堂上要讲授许多关于计算机图形学的知识和原理,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C程序这个工具解决实际学习中的问题,通过多次上机练习,在理解的基础上就会自然而然地掌握计算机图形学图形生成的算法和处理方式。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,编写出来的程序无法运行,这是由于大部分学生C语言基础只是不够牢固的原因。

学习计算机图形学不能停留在学习它的程序语言,而是利用学到的知识编写C语言程序来验证自己的想法,深入理解图形生成的原理,解决实际问题。即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握C语言、自己编写的程序是否能够正确运行、对计算机的理解是否到位。

通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去“掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。而且计算机图形学上机实验是依附在C语言编程基础之上的,我们对图形生成算法的理解要通过C程序才能体现出来。

通过这次为数不多的几天计算机实践学习,我们巩固了一些关于C语言的知识,理解了我们计算机图形学的理论知识,这对我们将来到社会工作将会有莫大的帮助。同时它让我知道计算机图形的强大和瑰丽之处,虽然我们学的都是基本的生成算法,但是通过老师展示的几个计算机图形学高级程序,我们才了解到计算机图形学可以做出非常华丽的视觉效果,而且只要你努力,任何东西都不会太难。

计算机图形学课程报告 篇5

论硕士研究生的计算机图形学教学思路和课件设计

笔者在多年的`教学实践中,总结出强调经典理论的实用价值和最新动态、设立中心线索并注意内容的取舍和侧重、结合OpenGL编程实例完成对内容关联度的密切提示等教学思路,借此达到激发学生兴趣并提高教学过程系统性的目的,能够有效地提高教学质量.本文重点介绍了笔者的教学思路以及与之配合的课件设计和使用等.

作 者:杨若瑜 作者单位:南京大学,计算机科学与技术系,江苏,南京,210093刊 名:计算机教育英文刊名:COMPUTER EDUCATION年,卷(期):“”(22)分类号:G642关键词:计算机图形学 硕士教学 课件设计

果树栽培学课程实习报告 篇6

论文题目:果树栽培学课程实习报告

学院:园艺学院专业年级:园艺 2008学号:080318086姓名:张秀兰

2011年 5月

福建农林大学园艺学院课程实习成绩评定表学年第学期课程实习

班级学号姓名成绩

评定教师复核教师

日期:

果树栽培学课程实习报告

摘要:本次课程实习从4月24日至4月30 日,为期七天,在课程老师的带领下,我们先后去了碧溪提子栽培与观光园,沙县三元回瑶村油桃栽培园,永春猛虎柑橘园,吾峰柑橘无病苗圃,漳州靖城天宝香蕉园(万桂农业有限公司)。通过实地参观,了解了福建主要名优果树的栽培情况、采后处理技术、销售模式、品牌建设以及目前存在的问题。

关键词:果树栽培生产技术

本文按照实习的行程,记录每一个实习点的情况,书写实习经历,表达实习体会。一:实习经历

1三明碧溪提子栽培与观光园

1.1实习经历

该片提子园采用的设施栽培技术,包括连栋式避雨栽培大棚和创新大棚,即根据提子的枝条蔓延趋势来搭建大棚。注重人工抹梢,该项目工作量比较大。主要栽植品种是欧亚早熟品种,如红地球,夏黑。品种特性是:果粒大,早熟,无核,不剥皮,鲜食为主。主要的销售市场是三明地区的水果市场和超市,以及用来自行酿酒。未来发展的方向是:不断扩大栽培面积,结合葡萄观光产业来扩大发展。

2.三明沙县回瑶村油桃栽培园

2.1简介

三元回瑶村是远近闻名的油桃专业村,油桃种植面积达120hm。2002年,回瑶村选送的白玉油桃在全省早熟桃评比中获得第一名。2004年,回瑶油桃获农业部无公害农产品认证;2009年,回瑶油桃获国家地理标志集体商标,回瑶油桃因此身价倍增,价格高达8元/kg。据悉,回瑶村2010年油桃产量预计达1 000 t多.仅此一项可为果农带来800多万元的收入。由回瑶村油桃种植户为主,联合牛岭、中村、白水、南坑等村油桃种植户及农资供应商等合作成立了三明市三元区回瑶大圣油桃专业合作社。合作社地址为三明市三元区中村乡回瑶果场,该场是经国家认证的无公害水果生产基地,出口水果果园生产基地。合作社会员种植油桃品种主要有白玉、丽春、五月阳光、玫瑰红、早红宝石、中油5号、千年红等十几个品种,种植面积达3800余亩,年产量5000多吨。合作社以回瑶果场无

公害水果基地为基础,全面推广无公害油桃栽培技术,年可生产无公害油桃1000多吨,备有油桃专用包装费。并建有油桃种苗繁育苗圃15亩,年可出圃各品种油桃种苗10万多株。

2.2实习经历

在油桃栽培园的负责人的带领下,我们来到了一个管理比较好的油桃园。回瑶油桃的主要栽植品种是短低温的早熟白玉油桃,果园采取粗放式的管理模式,采用割草的方式来直接提供养分和减少水分蒸腾。树形是采用自然开心型,都不会太高,在冬季的时候进行修剪。由于近年来油桃的价格比较好,果农一般不进行疏花果,可以提高整个产量,带来较好的经济效益。主要的销售渠道是果商来当地收购,平均价格都可以达到3元/斤,整体收益还是比较高的。

3.永春猛虎柑橘场

3.1简介

永春县是我国柑桔出口第一大县,至2007年已有柑桔栽培面积1万hm2,年产量23万多t,产量达1500kg/667m2。永春芦柑的面积、产量、质量、出口创汇等四大方面均居全省第一,产量连续15年居福建省首位。永春县猛虎柑橘场芦柑面积40hm2,年产1500t,产值300万元。猛虎柑橘场还顺利地通过了中国绿色食品发展中心的考评,被授予“绿色食品”标志的使用权,成为全省“绿色食品”芦柑基地之一。近年来黄龙病的大面积危害严重影响了柑桔的产量,猛虎柑橘场芦柑面积40hm2,其中有38hm2实行专业化防治,2hm2实行非专业化防治。

3.2实习经历

进入进入芦柑生产基地,看到的是一片绿色的芦柑园,闻到的是一股悠悠的桔子花香,该基地的负责人带我们参观了芦柑的栽培地,现场给我们介绍了近年来永春芦柑的发展情况。在管理果园的水平方面,近些年来,参考台湾芦柑的栽植技术,做了很多改进,如采用独立树干和自然开心树形的果树改造技术;自然生草栽培技术;合理疏花蔬果技术;配方施肥技术;综合防治病虫害技术。在品牌建设方面,开展多届的芦柑节,将永春芦柑推向了全国以及国外市场。但是近年来的黄龙病对永春芦柑的危害也比较严重,我们都能看到身边的芦柑树被其危害的病症,如树势生长不好,叶片黄化,部分枝干因被感染了黄龙病而被截去。但是因为黄龙病一直是不能根治的柑橘病害,所以只能靠培育无病苗木和除去患病植株的措施来预防得病和蔓延。负责人提到黄龙病之所以蔓延的速度这么快的原因,可能跟果林生态的改善有很大的关系,生草法的栽培技术以及农药的减少使

用,给昆虫创造了较好的生存环境,给柑橘木虱更多的生存空间,而柑橘木虱是黄龙病的直接传播者。当然气候条件的剧烈变化也是黄龙病爆发的一个影响因素之一。

4.吾峰柑橘无病苗圃

4.1实习经历

在参观完芦柑场后,我们亲眼见证了黄龙病的“威力”,对付它有效手段之一就是培育无病苗木。那这是一个怎样的培育过程呢?带着这个问题,我们来到了吾峰柑橘无病苗圃,相关工作人员带我们对无病苗圃进行了参观。该苗圃采用人工隔离的外部覆盖着防虫网的设施大棚对无病苗木进行培育,程序要求也很严格,主要目的就是要做到隔离。整个培育过程是:引进无病毒良种→建立无病苗圃→建立无病毒接穗园;建立无病毒砧木生产园→培育无病毒砧木,最后将无病接穗嫁接到无病毒砧木上。

5.漳州靖城天宝香蕉园(香蕉冷藏、催熟、保鲜库)

5.1简介

该园位于漳州城郊天宝镇,距城区10公里。天宝镇地处九龙江冲积地带,土壤肥沃。西北又有天宝大山挡住寒流,霜期短,种植香蕉得天独厚,是著名的香蕉产地。这里方圆十里都是连片的香蕉园,有“十里蕉香”之美誉。天宝香蕉是福建六大名果之一。当地农民栽培香蕉已有1200多年历史。目前种植面积2.8万亩,年产量最高达5.5万吨。

5.2实习经历

来到天宝,就像是来到了香蕉的世界,放眼望去都是成片的香蕉园,但是由于今年持续较长时间的低温天气,非常多的香蕉树受到冻害,展现在我们面前的不是一片盎然生机,而是枯死的黄叶连着幸存下来还挂在树上的香蕉。老师在现场给我们讲解了香蕉的栽培技术,受冻后应采取的措施以及果实套袋的优点。在香蕉保存库里面,我们看到了不同成熟度的香蕉,闻到了催熟剂乙烯的味道,对香蕉的催熟、保鲜贮存技术有了切身的体会。

6.福清三华公司

6.1企业简介

公司果蔬方面引种台湾芭乐、番石榴150亩,火龙果100亩,引进台湾及日

本等国内外蔬菜优良品种50多个。实施了活性有机肥施用,生物农药应用,反季节温室蔬菜栽培、农业标准化生产、无公害蔬菜、水果综合栽培技术等。

6.1实习经历

我们参观了火龙果和芭乐栽培园,公司负责人就火龙果和芭乐的栽培技术要点和注意事项给我们做了介绍,如火龙果的整枝、支架支撑技术;芭乐的采后修剪技术。

二:实习感想

计算机图形学课程报告 篇7

一、计算机图形学的简单论述

1. 主要内容

如何将图形通过计算机表现出来, 并对相关的图形利用计算机进行计算以及相关处理, 并将其显示出来的计算方法与相关原理在计算机图形学研究中, 是最主要的内容。计算机图形图像通常是由体、面、线、点等不同的几何元素以及线宽、线型、色彩和灰度等几种不同的不属于几何属性的内容组成。通常在相关的技术处理上来说, 计算机图形大致可以分为两个基本内容, 其中一类就是用线条信息将其进行相关表示处理, 比如说一些相关的工程图、线框上的曲面图等等;另一类就是大家常说的比较有真实感的图形图像即为明暗图。

在计算机图形学中, 利用计算机将图形呈现出一种比较赏心悦目的真实感, 这是其学科内容要表达的最重要目的。为达到相应的效果, 我们应将建立起几何表示, 这样能将图形中想要表达的真实的场景结合外在的光照模型设备展现出来, 并达到计算机在将假想的材质属性、纹理以及光源计算出来, 以便能达到预期的光照明效果。所以说, 在几何设计中计算机辅助功能与计算机图形学密不可分, 在实际操作中, 在几何场景中, 计算机图形学也能将其实体和曲线曲面造型的相关技术操作作为主要的研究对象。于此同时, 用数字图像方式将计算机图形相对比较真实的计算结果得以提供, 对于计算机图形图像处理技术来说, 图形学与其之间的关系也密不可分。

2. 发展

十九世纪五十年代, 在美国诞生了计算机附件, 经后来出现的滚筒式绘图仪逐渐将数字记录仪取代, 而在这一时期, 计算机仅仅局限于电子管式, 直到五十年代末期, 在美国的林肯实验室中相继开发出的空中防御计算机体系, 用来控制和指挥的计算机显示器也被第一次投入使用, 这样在显示器屏幕上操作者直接可以用笔将确定的目标指出来, 而在同一时期内, 一些相似的生产过程和技术设计也被人们广泛的应用, 这就表示初期的计算机图形学已经正式诞生。在此之前, 计算机系统一般都是符号处理, 计算机图形学出现之后, 计算机能将人们局部的右脑功能部分的表现出来, 这对建立计算机图形学来说, 意义也较为重要。

二、基本概念以及系统的功能和组成

1. 基本概念

计算机图形图像处理的操作过程就是将需要表示物体的几何模型和数据由数学或者概念的形势描述出来, 再经由计算机进行修改、存储、显示以及完善等。其最主要的内容有以下几点:

(1) 投影、平移、缩放、旋转等的几何转变

(2) 图像分析和分割、数字化和编码、增强以及复原等

(3) 消除计算机图形图像的隐面、线

(4) 设计计算机图形图像的造型和建模

(5) 将图形图像的曲面和曲线进行拟合操作

(6) 最后进行色彩设计以及将相对的明暗处以及贴图纹理进行处理

2. 功能和组成

(1) 功能

在计算机工程和科学领域, 计算机图形系统的研制和设计是最重要的内容, 而作为一个计算机图形处理系统, 必须应具备对话、输入和输出、存储和计算等相应的基本功能。计算机图形处理系统中的对话功能就是利用相关交互设备或者显示器直接将计算机和人进行通信功能, 人们对不满意的地方可以利用设计的图形和结果再关联相关设备对其进行修改;输入和输出功能就是讲图形图像中输入各种几何参数的形体命令, 在显示的状态下, 对最终修改的结果进行输出和拷贝;存储和计算功能就是将计算机图形图像中的关系以及几何数据进行实时的维护和检索, 在设计时所需要的一系列分析、变换、计算等等。

(2) 组成

相应的一些图形图像处理软件和配置的硬件设备两个部分组成计算机的图形图像系统。一般来说, 一些质量较高的图形跟其具有高性能的硬件设备密不可分, 图形图像结构系统中图形处理器是其部件的最重要部分, 它是将显示终端与计算机相衔接的纽带。对图形处理器本身来说, 因为自身存在的处理和存储功能, 并且能将其函数计算得到大部分的完成, 这对计算机的微软处理器来说, 不仅将其负担大大的减轻, 也将计算机操作系统的速度和图形图像的显示能力也得以提高。在计算机图像系统中, 鼠标和键盘是最常用的输入设备, 操作人员利用鼠标和键盘将相对应的图形软件在屏幕上进行输入和定位图形。而计算机图形输出设备则是利用快速输出或者处理和生成的显示系统上将绘图系统永久的保存下来, 其中最主要的就是打印机设备、绘图仪设备和显示器设备等等。随着社会经济建设的发展, 我国不断的引进先进的技术, 使计算机图形图像处理技术也在逐步的发展, 与此同时, 相关软件也在不断的完善和更新, 就目前来说, 我国相继出现了许多对计算机图行图像处理技术相关的软件系统, 并且得到了大力支持。为了能将计算机图形图像技术顺应时代的发展, 一些相关专业人员提出了将计算机图形软件逐渐趋于标准化的相关问题, 并相继开发了能直接满足用户以及相关设备的管理和驱动程序包。

三、计算机图形学的研究前沿和应用

1. 辅助制造和设计

在工业界中, 应用领域最活跃以及最广泛的计算机图形学就是CAD或者CAU。在设计一些产品时或者进行机械构造以及土建工程时, 计算机图形学得到广泛的运用, 同时在一些网络分析、电子线路以及集成电路等电子工业中也被广泛的采用, 其优势也相当明显, 遇到一个规模较大或者系统较复杂的电路板图时, 人工的力量已经不能满足其绘制和设计, 利用计算机图形系统能在较短的时间内对整个系统进行画图和设计, 这样既节省了时间, 也减少了人工的浪费。随着现代化互联网计算机的发展, 在互联网经济体制下将协同设计形成一套异地异构系统, 在当今社会和CAD领域中成为社会各界人士探讨的重要话题之一。在以工程图纸为基础, 研究CAD领域的最关键步骤就是重建三维形体, 即为:从一些二维信息中提取一些相关信息, 并对其进行综合分类, 以三维空间为主题, 重新将二维信息进行构造, 从而将重建的形体得以真正实现。但在目前来说, 一些重要的重建三维形体计算法主要都是面对一些受到严格限制的且对主轴方向以及多面体的二次曲面体, 但是, 重建三维形体中的任意曲面体在当今社会里, 仍是一个难度系数较高的问题。

2. 可视化

随着互联网技术的迅速发展, 计算机数据库的逐渐增多, 使大多数人们在处理和分析一些数据时面临的困难也越来越大, 操作者并不能从众多数据中迅速选出对自己有用的数据, 也没有办法将其最本质的特征以及变化规律找出来。如果将一些种类较多且相对比较繁琐的数据用计算机图形的方式将其进行归类表示, 这样人们在操作时对其本质特征以及发展趋势就能轻而易举的提取出来。在十九世纪时, 科学计算可视化在美国的科学基金会被相继提出, 就目前来说, 可视化在气象分析、流体力学以及医学中得以广泛利用, 其中发展空间最大的就是在医学领域, 对脑部进行远程手术时, 利用精密的得以实现的就是科学计算可视化。

3. 动画和艺术

随着计算机硬件以及图形学的逐步发展, 社会大众已经不再局限于满足一些静态的且质量较高的场景, 这就使计算机动画相继出现。在现代的商业美术工作人员都比较倾向于利用计算机进行艺术创作, 而用于艺术设计的软件也得以开发, 比如现代的对二维平面进行设计的画笔程序:Cordl Draw, Photoshop, Paint Shop;对三维动画渲染和建模的软件有3DMAX, Maya, 以及Alias, Softimage等直接生成动画的软件等等, 这些软件样数较多, 不仅能将各种各样的纹理贴图以及画壁画刷, 还能降图片进行变形或者雾化等一些列操作, 其许多功能都是一般的艺术家远不可达到的。

4. 用户接口

人们在使用计算机时, 第一印象或者感官就是用户接口, 能将软件的易用性提高的最简单办法就是将图形用户界面建立好。在上世纪八十年代末, 苹果公司突出图形化操作系统, 尤其是微软公司普及的Windows操作系统, 这就证明, 图形学在计算机的各个方面都渐渐融入。

四、区别和联系

计算机图形图像的区别在于其用途、理论基础、处理方法以及数据来源有很大的区别。计算机图像处理主要在航天航空、工业、医学以及军事上被广泛运用, 而计算机图形学则主要倾向于运用在CAD、CAM、CAE、CAI计算机动画、模拟和艺术中;在模糊数学、概率和统计以及信号处理等理论上, 图像处理被主要的利用在内, 而计算机图形学则是在分形、计算几何、透视与放射变换等理论中被广泛运用;其次就是数据来源, 图形数据一般来自人们的主观世界, 而图像数据则来自人们的客观世界。但在实际的运用操作中, 图形图像处理技术密不可分, 将两者相结合, 不仅能将视觉质量和效果得以完善, 也能将其变得更加精美。随着两者相关技术的发展, 它们之间的关系相互渗透、相互交叉。

五、结束语

综上所述, 计算机图形学与计算机图形图像处理技术已经在人们生活的各个领域被普遍运用, 它不仅能制造出一些比较唯美新奇的视觉效果, 也将人们的创造潜力得以充分发挥, 使人们的生活环境变得丰富多彩, 所以, 我们应熟练掌握计算机图形图像处理技术, 努力的创造出更多的精彩视觉生活。

摘要:在二十世纪八十年代末期, 计算机图形学以及图形图像处理技术相继产生, 并持续发展至今。在计算机图形学中, 图形图像处理技术备受关注, 能否将其得到合理的利用, 在现代化的学科应用领域中成为最重要的一个分支。文章将计算机图形学的发展历史以及研究的主要内容、图形图像系统处理技术的相关功能和组成部分、相对比较有真实感的图形画面以及在应用领域的技术实现进行综合分析, 并对计算机图形学的相关内容进行分类并概括总结, 对计算机图形图像处理技术和计算机图形学的相关知识能够得到更好的掌握。

关键词:计算机,图形学,图形图像,可视化,处理技术,探析

参考文献

[1]温玉春.计算机图像处理技术应用研究[J].现代商贸工业, 2011 (02)

[2]田亮.浅析计算机图形学的应用及其发展[J].民营科技, 2011 (12)

[3]慕乾华.计算机图形学在实践中的应用[J].价值工程, 2010 (09)

上一篇:学习贯彻党的十九届五中全会精神心得体会下一篇:关于预备团员转正申请书怎么写