当前位置:文档之家› 计算机图形学课程设计实习报告

计算机图形学课程设计实习报告

计算机图形学课程设计实习报告
计算机图形学课程设计实习报告

实验零? Visual C++ 2005绘图系统

地点:土木楼B401机房时间:星期三下午节次:第三大节

一、实验目的:

1. 了解Visual C++ 2005绘图的基本概念

2. 了解Visual C++ 2005绘图环境

3. 掌握用Visual C++ 2005设计绘图项目的基本步骤

4. 掌握用Visual C++ 2005绘图的基本命令

二、实验内容:

实验内容1:创建绘图应用程序主框架

实验内容2:应用程序编译运行

实验内容3:设置菜单项并生成消息响应函数

实验内容4:SetPixel绘图

三、实验步骤:

实验内容1:创建绘图应用程序主框架

步骤:

1.创建一个工作目录D:\MyProject

2.启动Visual Studio 2005

3.单击“文件”->“新建”->“项目”,项目类型对话框中选择“其他语言”->“VC++”->“MFC”,模版选择“MFC应用程序”。在工作目录D:\MyProject 下创建一个新应用项目: Sample,如下图所示。4.单击“确定”按钮。

5.单击“下一步”按钮。

6.在“应用程序类型中”,选择“单文档”类型。

7.单击“完成”,创建了一项空的工程-绘图应用程序主框架。

实验内容2:应用程序编译运行

运行版本有两类:Debug、Release, 生成Debug解决方案步骤如下:

1.生成解决方案

点击“生成-〉生成解决方案”, 生成了Debug版的可运行程序。

2.调试运行程序

点击菜单“调试——〉开始执行(不调试)”, 执行Debug版的可运行程序。

结果如下:

生成Release解决方案步骤如下:

1.生成解决方案

点击“生成-〉批生成”。

2.勾选“Release”,单击“生成”,生成可以独立于Visual C++ 2005外运行的.exe程序。

3.查看目录,sample.exe是Release版,单击即可以运行。

运行结果:

实验内容3:设置菜单项并生成消息响应函数

1.弹出菜单设计器

双击“资源视图”中的“Menu”展开文件夹,双击“IDR_MAINFRAME”,弹出菜单设计器。右健单击菜单设计器的“帮助”,选择“新插入”,插入一项菜单。

在新插入的菜单项的“Caption”中输入“绘图”。

3.输入ID

输入“打开”菜单项,输入“直线”菜单项,在“直线”菜单项下输入“DDA”菜单,“DDA”菜单的ID为ID_LINE_DDA。

4

单击菜单“视图-〉类视图”,

在“解决方案管理器”窗口中出现“类视图”窗口。

4.生成菜单消息响应函数

在类视图窗口,单击Csample0View类,单击事件按钮,

5.选择ID_LINE_DDA的COMMAND,添加OnLineDDA事件。

6.进入代码编辑器

在void Csample0View::OnLineDda()中的// TODO: 在此添加命令处理程序代码处输入的自己代码:AfxMessageBox("Hello World",MB_OK,NULL);

7.修改项目字符集属性

选择“项目”菜单->属性->,弹出“属性”对话框,选择“配置属性->常规->字符集”,改为“未设置”。

8.运行结果

重新生成解决方案,运行结果如下。

实验内容4:SetPixel绘图

在void Csample0View::OnLineDda()中的 // TODO: 在此添加命令处理程序代码处输入的代码:

// TODO: Add your command handler code here

CClientDC *pdc=new CClientDC(this);

CPen pen;

pen.CreatePen(PS_DOT,1,RGB(255,0,0));

CPen *oldpen=(CPen*)pdc->SelectObject(&pen);

int x,y;

y=100;

for(x=100;x<=300;x+=3){

y++;

pdc->SetPixelV(x,y,RGB(255,0,0));

}

pdc->DeleteDC();

}

运行结果如下。

四、实验结果:

实验内容1:创建绘图应用程序主框架结果

实验内容2:应用程序编译运行结果

实验内容3:设置菜单项并生成消息响应函数

实验内容4:SetPixel绘图

解释以下每条命令的含义

CClientDC *pdc=new CClientDC(this);//定义一个指针类型的CClientDC对象,客户区设备上下文用于客

//户区的输出,与特定窗口关联

CPen pen;//定义一个画笔对象

pen.CreatePen(PS_DOT,1,RGB(255,0,0));//赋予pen对象以风格

CPen *oldpen=(CPen*)pdc->SelectObject(&pen);//

pdc->SetPixelV(x,y,RGB(255,0,0));//画出像素坐标为(x,y),风格为红色的一点

六、其它的实验内容:

答:工具条按钮的添加

七、实验中发现的问题及你解决的方法:

答:发现的问题:调试过程中出现如下错误

解决的方法:重新生成解决方案,如还出现则多生成几次。

实验一直线的生成算法

地点:土木楼B401机房时间:星期三下午节次:第三大节

一、实验目的:

1.理解DDA算法

2.理解中点Bresenham算法

3.理解改进的Bresenham算法

4.了解DDA和Bresenham算法的区别,以及生成图形的差异原因

二、实验内容:

实验内容1:设计DDA算法程序

实验内容2:设计中点Bresenham算法程序

实验内容3:改进的Bresenham算法

三、实验步骤:

实验内容1:设计DDA算法程序

添加函数:void DDALine(int Xa, int Ya, int Xb, int Yb)

//DDA算法

void CSampleView::DDALine(int Xa, int Ya, int Xb, int Yb)

{

CClientDC *pdc=new CClientDC(this);

CPen pen;

pen.CreatePen(PS_DOT,1,RGB(255,0,0));

CPen *oldpen=(CPen*)pdc->SelectObject(&pen);

float delta_x,delta_y;int x,y;

int dx,dy,steps,k;

dx=Xb-Xa;

dy=Yb-Ya;

if(abs(dx)>abs(dy))

steps=abs(dx);

delta_y=(float)dy/(float)steps;

x=Xa;

y=Ya;

pdc->SetPixelV(x,y,RGB(255,0,0));

for(k=1;k<=steps;k++)

{

x+=(int)delta_x;

y+=(int)delta_y;

pdc->SetPixelV(x,y,RGB(255,0,0));

}

pdc->DeleteDC();

}

添加事件响应函数:

// 消息响应函数DDA算法程序的设计画直线

void CSampleView::OnDdaLine()

{

DDALine(100,100,300,300);

}

实验内容2:设计中点Bresenham算法程序

添加函数:void LineBresenhams(int Xa,int Ya,int Xb,int Yb)

//Bresenhams算法程序的设计画直线的实现

void CSampleView::LineBresenhams(int Xa,int Ya,int Xb,int Yb) { CClientDC *pdc=new CClientDC(this);

CPen pen;

pen.CreatePen(PS_DOT,1,RGB(255,0,0));

CPen *oldpen=(CPen*)pdc->SelectObject(&pen);

int dx=abs(Xa-Xb);

int dy=abs(Ya-Yb);

int p=2*dy-dx;

int twody=2*dy;

int twodydx = 2*(dy-dx);

int x,y,xend;

if(Xa>Xb)

{ x=Xb; y=Yb;

xend=Xa;

}

else

{

x=Xa;y=Ya;

xend=Xb;

}

pdc->SetPixelV(x,y,RGB(255,0,0));;

while(x

{ x++;

if(p<0)

p+=twody;

y++;

p+=twodydx; }

pdc->SetPixelV(x,y,RGB(255,0,0));;

}

}添加事件响应函数:

void CSampleView::OnBresenhamline()

{

// TODO: 在此添加命令处理程序代码

LineBresenhams(100,200,300,300);

}

实验内容3:改进的Bresenham算法

添加函数:void ImproveBresenhams(int Xa, int Ya, int Xb, int Yb)

//Bresenham算法改进算法的实现

void CSampleView::ImproveBresenhams(int Xa, int Ya, int Xb, int Yb) { CClientDC *pdc=new CClientDC(this);

CPen pen;

pen.CreatePen(PS_DOT,1,RGB(255,0,0));

CPen *oldpen=(CPen*)pdc->SelectObject(&pen);

int dx,dy,e,x,y;

dx=Xb-Xa;

dy=Yb-Ya;

e=-dx;

x=Xa;

y=Ya;

while(x<=Xb){

pdc->SetPixelV(x,y,RGB(255,0,0));;

x++;

e+=2*dy;

if(e>0){

y++;

e-=2*dx;

}

}

}

添加事件响应函数:

//菜单响应函数生成直线ImproveBresenhams算法

void CSampleView::OnImprove()

{

// TODO: 在此添加命令处理程序代码

ImproveBresenhams(200,100,300,300);

}

四、实验结果:

实验内容1:设计DDA算法程序

实验内容2:设计中点Bresenham算法程序

实验内容3:改进的Bresenham算法

DDA算法的缺点是什么?

答:DDA算法的缺点是:它的y和斜率k必须用浮点数表示,而且每一步都必须对y进行舍入取整,这不利于用硬件实现。

六、其它的实验内容:

答:添加工具栏按钮DDA,Bresenham,Bresenham改进画直线

在SampleView.cpp中添加代码:

ON_COMMAND(ID_BUTTONDDALine,OnDda)

ON_COMMAND(ID_BUTTONBresenham,OnBresenham)

ON_COMMAND(ID_BUTTONImprovedBresenham,OnImprovedbresenham)

调试点击工具栏按钮查看效果。

七、实验中发现的问题及你解决的方法:

发现的问题:在生成Release文件时出现错误,但调试时没有错误。

解决的方法:查了资料,现在还没有解决。

实验二:圆和椭圆的生成算法

地点: B401机房时间:星期四节次:第一大节

一、实验目的:

1、了解Bresenham法生成圆和椭圆方法

2、掌握Bresenham生成圆和椭圆算法的基本思想、推导和算法

二、实验内容:

实验内容1:Bresenham法生成圆

实验内容2:Bresenham法生成椭圆

三、实验步骤:

实验内容1:Bresenham法生成圆

步骤1:添加菜单“实验二”,子菜单如下:圆 ID_Circle

步骤2:在SampleView类中添加函数bool CircleLine(x1,y1,r)

实现代码:

bool CSampleView::CircleLine(int x1, int y1, int r)

{

x = 0; y = r; d = 3 - 2 * r;

while(x < y) {

pdc->SetPixelV(x+x1,y+y1,RGB(255,0,0));

pdc->SetPixelV(y+x1,x+y1,RGB(255,0,0));

pdc->SetPixelV(-y+x1,x+y1,RGB(255,0,0));

pdc->SetPixelV(-x+x1,-y+y1,RGB(255,0,0));

pdc->SetPixelV(-x+x1,y+y1,RGB(255,0,0));

pdc->SetPixelV(-y+x1,-x+y1,RGB(255,0,0));

pdc->SetPixelV(y+x1,-x+y1,RGB(255,0,0));

pdc->SetPixelV(x+x1,-y+y1,RGB(255,0,0));

if(d < 0) d += 4 * x + 6;

else {

d += 4 * (x - y) + 10;

y --;

}

x ++;

}

if(x == y) {

pdc->SetPixelV(x+x1,y+y1,RGB(255,0,0));

pdc->SetPixelV(y+x1,x+y1,RGB(255,0,0));

pdc->SetPixelV(-y+x1,x+y1,RGB(255,0,0));

pdc->SetPixelV(-x+x1,-y+y1,RGB(255,0,0));

pdc->SetPixelV(-x+x1,y+y1,RGB(255,0,0));

pdc->SetPixelV(-y+x1,-x+y1,RGB(255,0,0));

pdc->SetPixelV(y+x1,-x+y1,RGB(255,0,0));

pdc->SetPixelV(x+x1,-y+y1,RGB(255,0,0));

}

return true;

}

步骤3;添加画圆菜单响应函数:

void CSampleView::OnCircle()

{

// TODO: 在此添加命令处理程序代码

CircleLine(200,200,100);

}

步骤四:调试运行。

实验内容2:Bresenham法生成椭圆

步骤1:添加菜单“实验二”,子菜单如下:椭圆:ID_Ellipse

步骤2:在SampleView类中添加函数void Ellipse(int x1,int y1,int a, int b) 实现代码:

// 画椭圆的函数

void CSampleView::Ellipse(int x1,int y1,int a, int b)

{

int x,y;

x=0;

y=b;

d1=b*b+a*a*(-b+0.25);

pdc->SetPixelV(x+x1 ,y+y1 ,RGB(255,0,0));

pdc->SetPixelV(-x+x1 ,-y+y1 ,RGB(255,0,0));

pdc->SetPixelV(x+x1 ,-y+y1,RGB(255,0,0));

pdc->SetPixelV(-x+x1 ,y+y1,RGB(255,0,0));

while(b*b*(x+1)

{

if(d1<=0)

{

d1+=b*b*(2*x+3);

x++;

}

else

{

d1+=b*b*(2*x+3)+a*a*(-2*y+2);

x++;

y--;

pdc->SetPixelV(x+x1 ,y+y1 ,RGB(255,0,0));

pdc->SetPixelV(-x+x1 ,-y+y1 ,RGB(255,0,0));

pdc->SetPixelV(x+x1 ,-y+y1,RGB(255,0,0));

pdc->SetPixelV(-x+x1 ,y+y1,RGB(255,0,0));

}

}

d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;

while(y>0)

{

if(d2<=0)

{

d2+=b*b*(2*x+2)+a*a*(-2*y+3);

x++;

y--;

}

else

{

d2+a*a*(-2*y+3);

y--;

}

pdc->SetPixelV(x+x1 ,y+y1 ,RGB(255,0,0));

pdc->SetPixelV(-x+x1 ,-y+y1 ,RGB(255,0,0));

pdc->SetPixelV(x+x1 ,-y+y1,RGB(255,0,0));

}

步骤3;添加画圆菜单响应函数:

void CSampleView::OnEllipse()

{

// TODO: 在此添加命令处理程序代码

Ellipse(100,100,20,10);

}

步骤四:调试运行。

四、实验结果:

1.程序:程序在实验步骤中已有

2.图形:

五、回答如下问题:

1、屏幕上显示圆的几部分?为什么?

答:8部分,因为我们采用的画圆方法是八分法画圆,在屏幕上画出的是圆的8部分。

2、屏幕上显示椭圆的几部分?为什么?

答:8部分,因为我们在画圆的时候在第一象限内画出的有两部分:上半部分和下半部分;因此在四个象限内画出的是8部分。

六、其它的实验内容:

答:用动态画圆和椭圆的的方法来画圆:

七、实验中发现的问题及你解决的方法:

答:发现的问题:在调用函数的时候用传参的方法传递CClientDC *pdc不能运行;

解决方法:舍弃传参,每次画图形时重新声明CClientDC指针对象。

实验三:二维图形的基本几何变换

地点: B401机房时间:星期四节次:第四大节

一、实验目的:

1、掌握二维图形基本的几何变换原理及变换矩阵

2、掌握矩阵运算的程序设计

二、实验内容:

1、平移

2、旋转

三、实验步骤:

1、平移

步骤1:初始化函数,画出图形平移前的状态。实现在

void CSampleView::OnDraw(CDC* pDC)

{ CSampleDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

//初始化画出图形平移旋转前的状态

static double x2[5];

static double y2[5];

int i;

double r;

pDC->MoveTo(scx(0),scy(-ymax/2));

pDC->LineTo(scx(0),scy(ymax/2));

pDC->MoveTo(scx(-xmax/2),scy(0.0));

pDC->LineTo(scx(xmax/2),scy(0.0));

for(int x=0;x<=1;x=x+20)

{

parallel(x,x/2);

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

x2[i]=affinex(x1[i],y1[i],1.0);

y2[i]=affiney(x1[i],y1[i],1.0);

}

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

pDC->MoveTo(scx(x2[i]),scy(y2[i]));

pDC->LineTo(scx(x2[i+1]),scy(y2[i+1]));

}

}

}

步骤2:

⑴旋转函数的添加,在CSampleView类里添加旋转函数void Rotate();// 旋转

⑵再依次添加辅助函数及变量

public:

int scx(double xj);

int scy(double yj);

public:

double affinex(double x,double y,double d);

double affiney(double x,double y,double d);

public:

void parallel(double dx,double dy);

public:

double f[3][3];

//成员变量

double xmax;

double ymax;

void rotate(double theta);

⑶在SampleView.cpp中依次实现他们,函数如下:

//平移函数

void CSampleView::Pan()

{

// TODO: Add your command handler code here

static double x1[]={0.0,10.0,100.0,110.0,0.0};

static double y1[]={0.0,50.0,50.0,-10.0,0.0};

static double x2[5];

CClientDC *pdc=new CClientDC(this);

CPen pen;

pen.CreatePen(PS_SOLID,1,RGB(0,0xff,0x1f));

CPen *oldpen=(CPen*)pdc->SelectObject(&pen);

pdc->MoveTo(scx(0),scy(-ymax/2));

pdc->LineTo(scx(0),scy(ymax/2));

pdc->MoveTo(scx(-xmax/2),scy(0.0));

pdc->LineTo(scx(xmax/2),scy(0.0));

for(x=-300;x<=200;x=x+20){

parallel(x,x/2);

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

x2[i]=affinex(x1[i],y1[i],1.0);

y2[i]=affiney(x1[i],y1[i],1.0);

}

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

pdc->MoveTo(scx(x2[i]),scy(y2[i]));

pdc->LineTo(scx(x2[i+1]),scy(y2[i+1]));

}

}

pdc->DeleteDC();

}

int CSampleView::scx(double xj)

{

int x;

x=(int)(xj+xmax/2);

return(x);

}

int CSampleView:: scy(double yj)

{

int y;

y=(int)ymax-(int)(yj+(ymax/2));

return(y);

}

void CSampleView:: parallel(double dx,double dy)

{

f[0][0]=1.0;f[0][1]=0.0;f[0][2]=0.0;

f[1][0]=0.0;f[1][1]=1.0;f[1][2]=0.0;

f[2][0]=dx;f[2][1]=dy;f[2][2]=1.0;

}

double CSampleView::affinex(double x,double y,double d) {

double xx;

xx=x*f[0][0]+y*f[1][0]+d*f[2][0];

return(xx);

}

yy=x*f[0][1]+y*f[1][1]+d*f[2][1];

return(yy);

}

⑷添加事件响应函数调用平移函数

void CSampleView::OnPan()

{

// TODO: 在此添加命令处理程序代码

Pan();

}

平移完成。

2、旋转

步骤一:在平移完成的基础上添加旋转函数void Rotate()和辅助函数void rotate(); 实现函数如下:

void CSampleView::rotate(double theta)

{

double th;

th=theta/180*3.1415927;

f[0][0]=cos(th);f[0][1]=sin(th);f[0][2]=0.0;

f[1][0]=-sin(th);f[1][1]=cos(th);f[1][2]=0.0;

f[2][0]=0.0;f[2][1]=0.0;f[2][2]=1.0;

}

实现代码如下:

//旋转函数

void CSampleView::Rotate()

{

static double x1[]={0.0,10.0,100.0,110.0,0.0};

static double y1[]={0.0,50.0,50.0,0.0,0.0};

static double x2[5];

static double y2[5];

int i;

double r;

CClientDC *pdc=new CClientDC(this);

CPen pen;

pen.CreatePen(PS_SOLID,1,RGB(0,0xff,0x1f));

CPen *oldpen=(CPen*)pdc->SelectObject(&pen);

pdc->MoveTo(scx(0),scy(-ymax/2));

pdc->LineTo(scx(0),scy(ymax/2));

pdc->MoveTo(scx(-xmax/2),scy(0.0));

pdc->LineTo(scx(xmax/2),scy(0.0));

for(r=0;r<360;r=r+10){

rotate(r);

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

x2[i]=affinex(x1[i],y1[i],1.0);

y2[i]=affiney(x1[i],y1[i],1.0);

}

pdc->LineTo(scx(x2[i+1]),scy(y2[i+1]));

}

}

pdc->DeleteDC();

}

添加事件响应函数调用旋转函数:

void CSampleView::Onrotate()

{

// TODO: 在此添加命令处理程序代码

Rotate();

}

旋转完成。

四、实验结果:

1.程序

实验步骤中已包含完整的程序代码。

2.图形

程序打开时如图:

平移N次后:

旋转n次后:

五、其它的实验内容:

其他内容:用工具栏按钮实现平移和旋转。

六、实验中发现的问题及你解决的方法:

发现的问题:老师给的参考程序上有些函数没有定义,需自己编。

解决方法:自己在网上找图形学的资料,找到该函数后在程序中自己定义。

计算机图形学作业

计算机图形学第一次作业 计算机X班XXX 1XXX010XXX 1.你是否想用图形学的有关知识去解决一两个实际问题?你想解决的问题是什么?考虑如何解决? 答:我希望可以解决的有设计汽车外壳和制作动画。 解决方法:(1)汽车外壳 使用3D MAX/AutoCAD软件进行设计。 (2)制作动画 利用动画制作软件(3D MAX)在计算机上制作动画 2.某彩色图形显示系统,CRT显示器的分辨率为1024×1024,它可以从2^17次方种颜色中选择出2^15次方来显示,其帧缓冲器的容量应该如何计算?查色表的长度和宽度应为多少? 解:16b==2B 因为分辨率为1024x1024 所以1024*1024*2B=2MB 3.采用Bresenham画线算法,绘出起点(1,3),终点为(9,18)的直线段。 解: void DrawBresenhamline(int x0, int y0, int x1, int y1) { int dx = x1 - x0;//x偏移量 int dy = y1 - y0;//y偏移量 int ux = dx >0 ?1:-1;//x伸展方向 int uy = dx >0 ?1:-1;//y伸展方向 int dx2 = dx <<1;//x偏移量乘2 int dy2 = dy <<1;//y偏移量乘2 if(abs(dx)>abs(dy)) {//以x为增量方向计算 int e = -dx; //e = -0.5 * 2 * dx,把e 用2 * dx* e替换 int x = x0;//起点x坐标 int y = y0;//起点y坐标 for (x = x0; x < x1;x+=ux) { printf ("%d,%d\n",x, y); e=e + dy2;//来自2*e*dx= 2*e*dx + 2dy (原来是e = e + k) if (e > 0)//e是整数且大于0时表示要取右上的点(否则是右下的点) { y += uy; e= e - dx2;//2*e*dx = 2*e*dx - 2*dx (原来是e = e -1) } } } else {//以y为增量方向计算

计算机图形学实验

实验1 直线的绘制 实验目的 1、通过实验,进一步理解和掌握DDA和Bresenham算法; 2、掌握以上算法生成直线段的基本过程; 3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境 计算机、Turbo C或其他C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。 实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、把源程序以文件的形式提交; 7、按格式书写实验报告。 实验代码:DDA: # include # include

void DDALine(int x0,int y0,int x1,int y1,int color) { int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putpixel((int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; } } main(){ int gdriver ,gmode ;

cad制图实习报告

cad制图实习报告 篇一:CAD画图实习报告及总结 CAD实习报告 经过这学期的理论和上机学习,使我们对有了基本掌握,对于CAD这个课程学习也有了一个系统的学习和掌握。我学到的东西很多。首先对于电脑绘图不熟悉的我有很大的帮助,现在的我用Auto CAD绘图的速度快了很多。而且知道了很多快捷方式的运用。以下就是我在CAD实习过程中知道的一些小技巧。现在,我们即将结束这门课程,作为CAD学习的学生,大部分人都想以后成为一名建筑师,更好的去设计出符合企业单位,满足客户的要求,并深受大家喜爱的作品。这是在老师讲的人体工程学里面找的。CAD即计算机辅助设计与制图,是指运用计算机系统辅助一项设计的建立、修改、分析或优化的过程。 CAD软件必须有能接受和使其运行的物体,即硬件来 支持它才能有实际意义,这样就存在了CAD系统。CAD系统是由硬件、软件组成。硬件包括处理运算设备、图形显示设备、外部存储设备、数据图形输入输出设备以及有关的信息传输等硬件平台设备、软件包括系统软件、支撑(图形、汉字等)软件和专业应用软件。我国主要使用的CAD软件是美国AUTODESK公司开发的AUTODESK软件,它是一个功能强大、易学易用、具有开放型结构的软件口不

仅便于用户使用,而且系统本身可不断地扩充和完善,它被广泛地应用于微机及工作站上。因此,国内外软件开发商在此基础上进行有关工程设计专业的二次开发,如建筑行业:华远的HOUSE软件、建研院的ABD集成化软件BICAD软件、理正的CAD软件、方圆公司的方圆三维室内设计系统等。随着CAD技术的不断发展,其覆盖的工作领域也不断地扩大,如工程设计CAD项目的管理、初步设计、分析计算、绘制工程、统计优化等。CAD技术的应用正在有力而迅速地改变着传统的工程设计方法和设计生产的管理模式。 一、课程实习的目的: 把握Auto CAD用于工程制图的基本操作,了解工程图纸绘制的格式和要求,能够用Auto CAD绘制二维的工程图纸。 二、课程实习的任务: 1.学习Auto CAD的基本绘图操作。 2.绘制平面工程图纸。 3.了解工程图纸的一般要求和格式 三、课程设计的要求: 本课程实习以CAD软件为例,介绍计算机辅助设计的功能和应用,并作一定的实践操作。要求学生了解Auto CAD 的主要功能,把握Auto CAD用于工程制图的基本操作,了解工程图纸绘制的格式和要求,能够用Auto CAD绘

(完整版)计算机图形学发展综述

计算机图形学发展综述 报告 专业 班级 学生 学号

计算机图形学发展综述 一、计算机图形学历史 1950年,第一台图形显示器作为美国麻省理工学院(MIT)旋风I(Whirlwind I)计算机的附件诞生了。该显示器用一个类似于示波器的阴极射线管(CRT)来显示一些简单的图形。1958年美国Calcomp公司由联机的数字记录仪发展成滚筒式绘图仪,GerBer公司把数控机床发展成为平板式绘图仪。在整个50年代,只有电子管计算机,用机器语言编程,主要应用于科学计算,为这些计算机配置的图形设备仅具有输出功能。计算机图形学处于准备和酝酿时期,并称之为:“被动式”图形学。到50年代末期,MIT的林肯实验室在“旋风”计算机上开发SAGE空中防御体系,第一次使用了具有指挥和控制功能的CRT显示器,操作者可以用笔在屏幕上指出被确定的目标。与此同时,类似的技术在设计和生产过程中也陆续得到了应用,它预示着交互式计算机图形学的诞生。 1962年,MIT林肯实验室的Ivan E.Sutherland 发表了一篇题“Sketchpad:一个人机交互通信的图形系统”的博士论文,他在论文中首次使用了计算机图形学Computer Graphics”这个术语,证明了交互计算机图形学是一个可行的、有用的研究领域,从而确定了计算机图形学作为一个崭新的科学分支的独立地位。他在论文中所提出的一些基本概念和技术,如交互技术、分层存储符号的数据结构等至今还在广为应用。1964年MIT的教授Steven A. Coons提出了被后人称为超限插值的新思想,通过插值四条任意的边界曲线来构造曲面。同在60年代早期,法国雷诺汽车公司的工程师Pierre Bézier发展了一套被后人称为Bézier曲线、曲面的理论,成功地用于几何外形设计,并开发了用于汽车外形设计的

计算机图形学作业-Display-答案分析

计算机图形学作业I 一.判断题 1.齐次坐标提供了坐标系变换的有效方法,但仍然无法表示无穷远的点;(×) 2.若要对某点进行比例、旋转变换,首先需要将坐标原点平移至该点,在新的坐标系下做比例或旋转变换,然后在将原点平移回去;(√) 3. 相似变换是刚体变换加上等比缩放变换;(√) 4. 保距变换是刚体变换加上镜面反射;(√) 5. 射影变换保持直线性,但不保持平行性。(√) 二、填空题 1.透视投影的视见体为截头四棱锥形状;平行投影的视见体为长方体形状。 2.字符的图形表示可以分为矢量表示和点阵表示两种形式。 3.仿射变换保持直线的平行性 4.刚体变换保持长度 5.保角变换保持向量的角度 三、单项选择题 1. 分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存?( D) A. 512KB; B. 1MB; C. 2MB; D. 3MB ; 2. 在透视投影中,主灭点的最多个数是( C ) A 1; B 2; C 3; D 4 3. 以下关于图形变换的论述不正确的是( B ) A. 平移变换不改变图形大小和形状,只改变图形位置; B. 拓扑关系不变的几何变换不改变图形的连接关系和平行关系; C.旋转变换后各图形部分间的线性关系和角度关系不变,变换后直线的长度不变 D.错切变换虽然可引起图形角度的改变,但不会发生图形畸变; 4. 使用下列二维图形变换矩阵:将产生变换的结果为( D ) A. 图形放大2倍; B. 图形放大2倍,同时沿X、Y1个绘图单位; C.沿X坐标轴方向各移动2个绘图单位; D.沿X坐标轴方向放大2倍,同时沿X、Y坐标轴方向各平移1个绘图单位。 5. 下列有关投影的叙述语句中,正确的论述为(B ) A. 透视投影具有近小远大的特点; B. 平行投影的投影中心到投影面距离是无限的; C. 透视投影变换中,一组平行于投影面的线的投影产生一个灭点; T =

课程实习报告4篇

课程实习报告4篇 本文是关于课程实习报告4篇,仅供参考,希望对您有所帮助,感谢阅读。 §案情简述 被告人姚某因为和妻姐的财务纠纷,将其杀死并自首。故意杀人罪名无可争议,但是在量刑上却有较大争论,在庭审过程之中,围绕量刑问题,原告和被告之间展开了激烈的争论。 §本案争论的逻辑 法院在量刑上应作一个判断: 对被告人应 1)量重刑或2)量轻刑 为做出以上判断,需要考虑以下条件 →①姚某是否属于自首悔罪②姚某主观恶性是强还是弱 如果自首悔罪,主观恶性较弱,此案必将轻判,反之将重判。并且这两点是紧密联系的,双方都非常注意在这方面找出有利于自己的证言。 由此双方争论由此交结在"预谋"这一要素之上。先来看看"预谋"这个概念。 有预谋→意味着主观恶性强,是有计划的,严密的杀人,社会危害大。即使其自首也可以认为是预谋之中的事。并且,供词中的"有预谋"和庭审中姚某辩称自己是一时冲动杀人矛盾,使得被告人姚某的自首情节中"需要坦白自己一切罪行"(包括自己的动机)不能成立,因此自首行为亦值得商榷。 无预谋→意味着姚某只是无意杀人,而非有计划的。主观恶性较弱,社会危害小,加之有自首行为,姚某的罪行可以轻判。姚某就处于较为有利一些的地位。 双方都非常清楚这次交锋的关键点,围绕是否有预谋这个作案动机进行了以事实为依据的大讨论。原告方希望置被告方于死的,被告方希望取得较为有利得地位,通过各种论证和反驳通过各种命题去达到自己的目的。 其一§对于姚某"预谋已久"的论证和反驳 原告为了证明被告人预谋已久,心怀不轨,提出了一下三个证据。 证据一:被告人姚某,携带刀具和雷管进入马某家中,其必然是早有准备,

证据二:被告人姚某,砍被害人20余刀直至对方身亡,由此可见姚某主观恶性之强,预谋之深。 证据三:姚某在伤人之后,并没有仔细观察对方生死,或者拨打120急救电话。放任对方生死,姚某只是区公安机关自首,但并不能认定其自首是悔罪表现,或许只是惧怕重刑。说以其主观恶性更深,更能证明其是有预谋的杀人。 一、课程实习的目的: 把握auto cad用于工程制图的基本操作,了解工程图纸绘制的格式和要求,能够用auto cad绘制二维的工程图纸。 二、课程实习的任务: 1.学习auto cad的基本绘图操作。 2.绘制平面工程图纸。 3.了解工程图纸的一般要求和格式 三、课程设计的要求: 本课程实习以cad软件为例,介绍计算机辅助设计的功能和应用,并作一定的实践操作。要求学生了解auto cad的主要功能,把握auto cad用于工程制图的基本操作,了解工程图纸绘制的格式和要求,能够用auto cad绘制二维的工程图纸。 四、意义: 随着传统cad系统在工业界的应用以及现代设计问题的复杂化、智能化,人们不再仅仅满足于用计算机取代人进行手工绘图。所幸随着计算机图形学、人工智能、计算机网络等基础技术的发展和计算机集成制造、并行工程、协同设计等现代设计理论和方法的研究,使得cad系统也由单纯二维绘图向三维智能设计、物性分析、动态仿真方向发展,参数化设计向变量化和vgx(超变量化)方向发展,几何造型、曲面造型、实体造型向特征造型以及语义造型等方向发展;另一方面,伴随着cad软件复杂程度的增加和各个不同应用系统间互操作的现实需要,人们希望cad系统具有极佳的开放性,同时又能“搭积木”似的自由拼装形成不同的功能配置,软件工程技术非凡是组件开发技术的研究应用和逐渐成熟为解决这一问题提供了坚实的基础。

计算机图形学实验二报告

计算机科学与通信工程学院 实验报告 课程计算机图形学 实验题目曲线拟合 学生姓名 学号 专业班级 指导教师 日期

成绩评定表

曲线拟合 1. 实验内容 1. 绘制三次Bezier曲线 (1)给定四个已知点P1—P4,以此作为控制顶点绘制一段三次Bezier曲线。 (2)给定四个已知点P1—P4,以此作为曲线上的点绘制一段三次Bezier曲线。 2. 绘制三次B样条曲线 给定六个已知点P1—P6,以此作为控制顶点绘制一条三次B样条曲线。 2. 实验环境 软硬件运行环境:Windows XP 开发工具:visual studio 2008 3. 问题分析 1. 绘制三次Bezier曲线 Bezier曲线是用N+1个顶点(控制点)所构成的N根折线来定义一根N阶曲线。本次实验中的三次Bezier曲线有4个顶点,设它们分别为P0,P1,P2,P3,那么对于曲线上各个点Pi(x,y)满足下列关系: P(t)=[(-P0+3P1-3P2+3P3)t3+(3P0-6P1+3P2)t2+(-3P0+3P2)t+(P0+4P1+P2)]/6 X(t)=[(-X0+3X1-3X2+3X3)t3+(3X0-6X1+3X2)t2+(-3X0+3X2)t+(X0+4X1+X2)]/6 Y(t)=[(-Y0+3Y1-3Y2+3Y3)t3+(3Y0-6Y1+3Y2)t2+(-3Y0+3Y2)t+(Y0+4Y1+Y2)]/6 其中P0、P1、P2、P3为四个已知的点,坐标分别为(X0、Y0)、(X1、Y1)、(X1、Y2) 、(X3、Y3)。所以只要确定控制点的坐标,该曲线可通过编程即可绘制出来。 2. 绘制三次B样条曲线 三次B样条函数绘制曲线的光滑连接条件为:对于6个顶点,取P1、P2、P3、P4 4个顶点绘制在第一段三次样条曲线,再取P2、P3、P4、P5 这4个顶点绘制在第二段三次样条曲线,总计可绘制3段光滑连接的三次样条曲线。 4. 算法设计 程序框架 //DiamondView.h class CDiamondView : public CView { ……

计算机图形学作业-Display-答案

计算机图形学作业 I 一.判断题 1.齐次坐标提供了坐标系变换的有效方法,但仍然无法表示无穷远的点;(×) 2.若要对某点进行比例、旋转变换,首先需要将坐标原点平移至该点,在新的坐标系下做比例或旋转变换,然后在将原点平移回去;(√) 3. 相似变换是刚体变换加上等比缩放变换;(√) 4. 保距变换是刚体变换加上镜面反射;(√) 5. 射影变换保持直线性,但不保持平行性。(√) 二、填空题 1.透视投影的视见体为截头四棱锥形状;平行投影的视见体为长方体形状。 2.字符的图形表示可以分为矢量表示和点阵表示两种形式。 3.仿射变换保持直线的平行性 4.刚体变换保持长度 5.保角变换保持向量的角度 三、单项选择题 1. 分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存?( D) A. 512KB; B. 1MB; C. 2MB; D. 3MB ; 2. 在透视投影中,主灭点的最多个数是( C ) A 1; B 2; C 3; D 4 3. 以下关于图形变换的论述不正确的是( B ) A. 平移变换不改变图形大小和形状,只改变图形位置; B. 拓扑关系不变的几何变换不改变图形的连接关系和平行关系; C.旋转变换后各图形部分间的线性关系和角度关系不变,变换后直线的长度不变 D.错切变换虽然可引起图形角度的改变,但不会发生图形畸变; 4. 使用下列二维图形变换矩阵:将产生变换的结果为( D ) A. 图形放大2倍; B. 图形放大2倍,同时沿X、Y1个绘图单位; C.沿X坐标轴方向各移动2个绘图单位; D.沿X坐标轴方向放大2倍,同时沿X、Y坐标轴方向各平移1个绘图单位。 5. 下列有关投影的叙述语句中,正确的论述为(B ) A. 透视投影具有近小远大的特点; B. 平行投影的投影中心到投影面距离是无限的; C. 透视投影变换中,一组平行于投影面的线的投影产生一个灭点; T =

计算机图形学课程设计书

计算机图形学课程设计 书 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

课程设计(论文)任务书 理学院信息与计算科学专业2015-1班 一、课程设计(论文)题目:图像融合的程序设计 二、课程设计(论文)工作: 自2018 年1 月10 日起至2018 年1 月12日止 三、课程设计(论文) 地点: 2-201 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)熟悉Delphi7的使用,理论与实际应用相结合,养成良好的程序设计技能;(2)了解并掌握图像融合的各种实现方法,具备初步的独立分析和设计能力;(3)初步掌握开发过程中的问题分析,程序设计,代码编写、测试等基本方法;(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力; (5)在实践中认识、学习计算机图形学相关知识。 2.课程设计的任务及要求 1)基本要求: (1)研究课程设计任务,并进行程序需求分析; (2)对程序进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;(3)实现各功能模块代码; (4)程序组装,测试、完善系统。 2)创新要求: 在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。

3)课程设计论文编写要求 (1)要按照书稿的规格打印誊写课程设计论文 (2)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结(3)论文装订按学校的统一要求完成 4)参考文献: (1)David ,《计算机图形学的算法基础》,机械工业出版社 (2)Steve Cunningham,《计算机图形学》,机械工业出版社 (3) 5)课程设计进度安排 内容天数地点 程序总体设计 1 实验室 软件设计及调试 1 实验室 答辩及撰写报告 1 实验室、图书馆 学生签名: 2018年1月12日 摘要 图像融合是图像处理中重要部分,能够协同利用同一场景的多种传感器图像信息,输出一幅更适合于人类视觉感知或计算机进一步处理与分析的融合图像。它可明显的改善单一传感器的不足,提高结果图像的清晰度及信息包含量,有利于更为准确、更为可靠、更为全面地获取目标或场景的信息。图像融合主要应用于军事国防上、遥感方面、医学图像处理、机器人、安全和监控、生物监测等领域。用于较多也较成熟的是红外和可见光的融合,在一副图像上显示多种信息,突出目标。一般情况下,图像融合由

研究生实习报告

研究生暑期社会实践报告 姓名: 班级: 学号: 专业:

一:实习时间:2016年7月20日—2016年8月20日 二:实习地点:技术有限公司 三:实习目的: 实习的质量关系到自己相关专业能力的提升,作为大学期间最重要的实习之一,让学生进一步了解专业背景,把在校期间的学习和实践结合起来,发现自己的不足,温故已学过的知识。在校文化课的学习仅仅使我对本专业理论知识有一定的了解,但在实践过程中我们需要查阅相关的文献和资料来解决我们所遇到的问题,这进一步加深我们对专业的相关发展背景有了更加清晰的了解与更准确的直观认识。在不断的学习中,积累了知识和经验,为将来就业快速发展打下坚实的基础。更重要的是,使我们不但开阔了思路,增长了见识,在学习和实践中锻炼了自己的实际操作和解决问题的能力。自身整体素质的提高使我受益匪浅。 四:实习公司简介: -获德图像技术有限公司是一家致力于机器视觉高新技术领域内各种自动 检测设备的开发、研制和销售的综合型高技术企业。该公司机器视觉和图像处理技术在玻璃纤维(电子布、多轴向、格子布、短切毡)、无纺布、帘子布,晶片、纺织、医用辅料等表面质量检测的研究一直处于国内领先地位。 公司常年与“陕西省2011产业用纺织品协同创新中心”及“陕西省纺织印染自动化工程技术研究中心”合作,依托数字图像处理、模式识别以及机器视觉技术,多次成功的解决了纺织用品和工业板材表面缺陷检测难题,提高产品质量。公司非常重视和高校合作,先后开发出多种机器视觉教学实验平台,培养学生在机器视觉方面的创新实践能力。 目前公司拥有发明专利4项,实用新型专利10余项,软件著作权3项。公司团队骨干研发成员由来自浙江大学、 -交通大学、 -电子科技大学以及 -工程大学等学校博士、硕士,平均行业工龄超过十年以上,为公司的研发生产提供了根本性和技术上的保证。

计算机图形学报告

中南大学 计算机图形学 实验报告 学生姓名谭淼 学号23 专业班级应数1102班 指导老师刘圣军 数学与统计学院 2013年12月 实验目的:设计并实现一个简单动画(二维或三维)。熟悉并应用画线的基本算法—Bresenham算法。 实验过程: 1、实验步骤: (1)打开Visual Studio 2010,新建一个MFC项目,取名为tuxingxue,设置为单文档。 (2)打开类视图,添加一个名为Cline2D的类,在该类中添加BresenhamLine(CDC* pDC, int xa,float ya,int xb,float yb) DrawPixel(CDC* pDC, int x, float y, unsigned int color, int size); BresenhamLine1(CDC* pDC, int xa,float ya,int xb,float yb);

BresenhamLine2(CDC* pDC, int xa,float ya,int xb,float yb); BresenhamLine3(CDC* pDC, int xa,float ya,int xb,float yb); BresenhamLine4(CDC* pDC, int xa,float ya,int xb,float yb); 以上函数的返回值类型均为void型。在中,分别在其中添加代码实现画线的功能,具体代码见附录中的源代码。 (3)画出基本图形。在中定义CLine2D 的一个对象为line1,以便调用CLine2D中的函数,此时在调用的函数中赋初始值即可画出最基本的图形,即为一颗大五角星以及三颗小的五角星。 (4)让画出的五角星动起来。从类视图中CtuxingxueView下添加名为OnTimer的消息处理函数,在中添加bool型变量m_flag,在OnTimer函数下添加代码,具体代码见附录。在添加变量int m_x1、int m_y1、int m_x2、int m_y2、int m_x3、int m_y3、int m_x4、int m_y4、int m_x5、int m_y5、int m_x6、int m_y6、int m_x7、int m_y7、int m_x8、int m_y8、int m_x9、int m_y9、int m_x10、int m_y10、 int m_x11、int m_y11、int m_x12、int m_y12。在中为这些变量赋初始值,将第三步中函数赋的初值用这些变量代替,这样变量的值可以改变,在资源视图中menu下IDR_MAINFRAME中添加名为绘图的菜单项,在绘图下添加名为运行的选项,其ID号为ID_run,添加事件处理程序,函数处理程序名称为Onrun,将其类选为C tuxingxueView,此时,在Onrun中添加代码,再运行就可以让图形动起来了。 2、实验中遇到的问题及处理方法

计算机图形学作业题

计算机图形学作业题 1. 计算机中由图形的形状参数(方程或分析表达式的系数,线段的端点坐标等)加属性参数(颜色、线型等)来表示图形称图形的参数表示;枚举出图形中所有的点称图形的点阵表示,简称为图像(数字图像) 2. 什么是计算机图形学?计算机图形学有哪些研究内容? 3. 计算机图形学有哪些应用领域? 4. 计算机图形学有哪些相关学科分支?它们的相互关系是怎样的? 5. 图形系统的软件系统由哪些软件组成?举例说明。 6. 了解计算机图形系统的硬件。 7. 什么是显示器的分辨率、纵横比、刷新率? 8. 什么是像素、分辨率、颜色数?分辨率、颜色数与显存的关系? 分辨率M ?N 、颜色个数K 与显存大小V 的关系: 例:分辨率为1024像素/行?768行/ 帧,每像素24位(bit )颜色(224种颜色)的显示器,所需的显存为:1024?768?24位(bit )=1024?768?24/8=2359296字节(byte )。或:每像素16777216种颜色(24位真彩色),1024?768的分辨率,所需显存为:1024?768?log 216777216位显存=2359296字节显存。 9. 什么是图元的生成?分别列举两种直线和圆扫描转换算法。 10. OpenGL 由核心库GL(Graphics Library)和实用函数库GLU(Graphics Library Utilities)两个库组成。 11. 区域填充算法要求区域是连通的,因为只有在连通区域中,才可能将种子点的颜色扩展到区域内的其它点。 区域可分为 向连通区域和 向连通区域。区域填充算法有 填充算法和 填充算法。 12. 字符生成有哪两种方式? 点阵式(bitmap fonts 点阵字——raster 光栅方法):采用逐位映射的方式得到字符的点阵和编码——字模位点阵。 笔画式(outline fonts 笔画字——stroke 方法):将字符笔画分解为线段,以线段端点坐标为字符字模的编码。 13. 图形信息包含图形的 和 。 14. 什么是图形变换?图形变换只改变图形的 不改变图形的 。图形变换包括 和 ( )。 15. 熟练掌握二维图形的齐次坐标表示、平移、比例、旋转、对称变换以及复合变换的方法和原则。 16. 图形的几何变换包括 、 、 、 、 ;图形连续作一次以上的几何变换称 变换。 17. 试写出图示多边形绕点A(xo,yo)旋转的变换矩阵。要求写出求解过程及结果。 18. 试写出针对固定参考点、任意方向的比例变换矩阵。 19. 试写出对任意直线y=mx+b 的对称变换矩阵。 20. 什么是窗口?什么是视区?什么是观察变换? 21. 简述二维观察变换的流程。 22. 试述窗口到视区的变换步骤,并推出变换矩阵。 ??—(位) —K N M V 2log ??≥

计算机图形学 课程设计作品

《计算机图形学Visual c++版》考试作业报告 题目:计算机图形学图形画板 专业:推荐IT学长淘宝日用品店530213 班级:推荐IT学长淘宝日用品店530213 学号:推荐IT学长淘宝日用品店530213 姓名:推荐IT学长淘宝日用品店530213 指导教师:推荐IT学长淘宝日用品店530213 完成日期: 2015年12月2日

一、课程设计目的 本课程设计的目标就是要达到理论与实际应用相结合,提高学生设计图形及编写大型程序的能力,并培养基本的、良好的计算机图形学的技能。 设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握计算机图形学基本知识和算法设计的基本技能术,掌握分析、解决实际问题的能力。 通过这次设计,要求在加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。 二、设计内容推荐IT学长淘宝日用品店530213 设计一个图形画板,在这个图形画板中要实现: 1,画线功能,而且画的线要具备反走样功能。 2, 利用上面的画线功能实现画矩形,椭圆,多边形,并且可以对这些图形进行填充。 3,可以对选中区域的图形放大,缩小,平移,旋转等功能。 三、设计过程 程序预处理:包括头文件的加载,常量的定义以及全局变量的定义 #include "stdafx.h" #include "GraDesign.h" #include "GraDesignDoc.h" #include "GraDesignView.h" #include "math.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //******自定义全局变量 int type = -1; CPoint point1; CPoint point2; CPoint temp[2];

计算机图形学报告

数字媒体技术专业 计算机图形学课程设计报告 院系:印包学院 专业班级:媒体121 学生学号: 3120342001 学生姓名:孔祥倩 指导教师:吴学毅 2014年秋季学期

目录 一.课程设计的目的 (2) 二.课程系统描述实现及步骤 (2) 三.设计内容 (3) 四.源程序代码 (4) 五.总结 (19) 六.参考文献 (20) 七.附录 (20)

一、课程设计的目的 OpenGL即开放性图形库,它是一种高性能的开放式且功能强大的3D图形库,具有几百个指令和函数。本文讨论了两种将常见三维模型转入OpenGL 中实现交互的方法,首先对文件进行分析,然后给出转化的思路。从而将三维建模软件产生的三维模型移植到三维场景中,实现仿真. 本课程主要内容包括计算机图形学的研究内容、发展与应用,图形输入输出设备,图形显示原理,图形软件标准,基本图形生成算法,图形几何变换与裁剪,自由曲线和曲面三维实体造型,分形几何造型,分形艺术,隐藏面消除,光照模型,颜色模型,光线跟踪,纹理细节模拟,常用的计算机动画技术和软件等。在学期期末时按课程要求进行运动,提高学生对计算机图形学知识的了解与运用技巧同时通过此次课程设计提高动手实践能力与学习分析能力这就是本次的课 OpenGL的英文全称是“Open Graphics Library”即“开放的图形程序接口”,因为其良好的可移植性和跨平台性,已逐渐成为高性能图形开发和交互式视景仿真的国际图形标准。它是一种高性能的开放式且功能强大的3D图形库,具有几百个指令和函数。使用这些指令和函数可以构造出高质量的静止物体模型和动态图像,并且可以实现对模型的实时交互操作过程。但是OpenGL中并没有提供建模的高级命令,其实现过程也是通过基本的几何图元点、线和多边形来建立三维立体模型的,过程比较繁琐,编程量较大。 二.课程系统描述实现及步骤 此次课程设计的课题为利用VC++6.0和插件OPENGL制作三维模型。本设计主要通过建立MFC工程,在工程里建立一个三维模型,来建立一个动态的三维模型。设计一个小院子,其中有房子,树木,桌凳,月亮的一系列景物。运行程序,实现在这个小院子中的漫游。 主要步骤如下: 1:工程的建立 2:三维模型的建立和映射 3:三维模型的运动 一:工程的建立 1:系统配置。先对机子安装VC++6.0.在建立工程前,本实验需要添加OPENGL插件,故需要在Windows环境下安装GLUT 步骤如下: 1、将下载的压缩包解开,将得到5个文件 2、在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\PlatformSDK\include\gl文件夹”)。把解压得到的glut.h放到这个文件夹。 3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VisualStudio2005,则应该是其安装目录下面的“VC\lib”文件夹)。 4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。(典型的位置为:C:\Windows\System32)然后建立

计算机图形学作业题

1、已知一直线段起点(0,0),终点(8,6),利用Bresenham算法生成此直线段,写出 生成过程中坐标点及决策变量d的变化情况,并在二维坐标系中,标出直线上各点。 2、试用中点画圆算法原理推导第一象限中y=0到x=y半径为R的圆弧段的扫描转换算法。(要求写清原理、误差函数和递推公式,并进行优化) 3、如下图所示多边形,若采用扫描线算法进行填充,试写出该多边形的ET表和当扫描线Y=3时的有效边表(AET表)。 4、试按左下右上顺序用四向算法,分析当S1为种子时,下图区域的填充过程。 5、将下图中的多边形ABCD先关于点C(3,4)整体放大2倍,再绕点D(5,3)顺时针旋转90 ,试推导其变换矩阵、计算变换后的图形各顶点的坐标,并画出变换后的图形。

6、已知三角形ABC 各顶点的坐标A(3,2)、B(5,5)、C(4,5),相对直线P 1P 2(线段的坐标分别为:P 1 (-3,-2) 、P 2 (8,3) )做对称变换后到达A ’、B ’、C ’。 试计算A ’、B ’、C ’的坐标值。(要求用齐次坐标进行变换,列出变换矩阵,列出计算式子,不要求计算结果) 7、试作出下图中三维形体ABCDE 的三视图。要求写清变换过程,并画出生成的三视图。 x 8、试采用Sutherland –Cohen 裁剪算法,叙述裁剪如下图所示的直线AB 和CD 的步骤: ① 写出端点A 、B 、C 、D 的编码; ② 写出裁剪原理和直线AB 、CD 的裁剪过程。 A B C D 9 、用梁友栋算法裁减如下图线段AB ,A 、B 点的坐标分别为(3,3)、(-2,-1) 裁剪窗口为wxl=0,wxr=2,wyb=0,wyt=2。

计算机图形学课程设计

《计算机图形学》课程设计报告题目名称:球体背面剔除消隐算法 专业计算机科学与技术 班级计科15升-1班 学号 1516353004 姓名 指导教师王玉琨 2016 年 06 月 07 日

目录 设计内容与要求 (03) 总体目标和要求 (03) 内容与要求 (03) 总体设计 (03) 2.1 球的消隐处理基本原理 (03) 2.2 具体设计实现 (04) 详细设计 (04) 3.1调试后正确的程序清单 (04) 功能实现 (08) 4.1程序运行结果 (09) 4.2 功能实现及分析 (09) 总结 (09) 参考文献 (10)

球体背面剔除消隐算法 第 1章设计内容与要求 1.1 总体目标和要求 课程设计的目的:以图形学算法为目标,深入研究。继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统, 并能从某些方面作出评价和改进意见。 通过完成一个完整程序,经历策划、设计、开发、测试、总结和验收各阶段,达到: 1) 巩固和实践计算机图形学课程中的理论和算法; 2) 学习表现计算机图形学算法的技巧; 3) 培养认真学习、积极探索的精神; 4) 具备通过具体的平台实现图形算法的设计、编程与调试的能力; 5) 完成对实验结果分析、总结及撰写技术报告的能力。 总体要求:策划、设计并实现一个能够充分表现图形学算法的演示系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。 开发环境:Viusal C++ 6.0 1.2 内容与要求 球体背面剔除消隐算法 内容:(1)掌握背面剔除消隐算法原理; (2)实现矢量点积与叉积运算; (3)透视投影变换 (4)曲面体经纬线划分方法 功能要求: (1)绘制球体线框模型的透视投影图,使用背面剔除算法实现动态消隐; (2)通过右键菜单显示消隐效果,右键菜单有两个选项:未消隐与消隐; (3)使用键盘的上下左右控制键旋转消隐前后的球体; (4)单击左键增加视距,右击缩短视距; 第2章总体设计 2.1 球的消隐处理基本原理 球体的曲面通常采用一组网格多边形来表示,即把曲面离散成许多小平面片,用平面逼近曲面,一般使用许多四边形来逼近曲面。 网格四边形愈多,逼近曲面的精度就愈高,逼近效果就愈好,曲面看起来就越光滑。一般根据实际需要来确定合适的逼近精度即网格多边形数目。 当曲面表示为一组网格多边形时,消隐处理的主要工作是确定各网格多边形的可见性,由此可用平面立体的算法对曲面进行消隐处理。 球面的参数方程为:

《计算机图形学基础》第三次大作业实验报告共3页文档

第三次实验 1. 实验目的 实现用 Phong 光照明模型显示网格模型(*.smf)。分别实现不使用/使用增量式光强/法 向插值算法,比较三种不同的显示效果和效率。 Phong模型中各参数可调,观察它们的作用。 与用户的交互方式为图形用户界面,操作简单,界面友好。 2. 算法描述 2.1. 基于扫描线算法的Phong 模型实现 上一次大作业中我没有完成扫描线 ZBuffer 算法,使得程序的效率很低,这次作业考虑 到各种计算对时间的消耗会更大,所以我首先完成了扫描线算法再进行这次作业代码的编写。 对扫描线Z-Buffer算法这里不作详细描述,主要介绍 Phong模型的实现。基于扫描线算 法的 Phong 模型实现是非常方便的,因为最基本的 Phong 模型中每个面的颜色是法向量的 函数,因此每个面的颜色是相同的,这样在扫描线算法之前我首先初始化了一个数组,将各 个面的颜色根据用户提供的参数以及 Phong 模型公式计算出来保存在这个数组里,每一项 对应一个面,这样在具体扫描线算法的执行过程中每一个点颜色的获取

都仅仅是对数组的读 取操作,是O(1)的复杂度,不会消耗太多时间。 算法如下: 1.对物体表面上的每个点P,均需计算光线L的反射方向R, R=2N(N·L)-L。 为了减少计算量,假设: 2.光源在无穷远处,L为常向量 3.视点在无穷远处,V为常向量 4.用(H?N)近似(R?V),H为L与V的平分向量 5.Phong光照明模型的RGB颜色模型形式 2.2. 双线性光强差值算法 考虑到双线性光强差值算法的核心思想是由顶点的光强插值计算各边的光强,然后由各 边的光强插值计算出多边形内部点的光强,结合之前实现的扫描线ZBuffer 算法,我使用了 增量的方式实现这个算法,也就是将它和扫描线算法结合起来,在扫描线算法每个面的边表 中多加几个个域来表示当前的光强、光强在X 方向的单位增量和光强在 Y 方向的单位增量, 这样在扫描到每个点的时候就可以根据前一个点的光强以及光强增量获得该点的光强,另外 在扫描线改变的时候光强也需要根据Y方向的增量来进行相应的修改。

16秋西交《计算机图形学》在线作业

奥鹏17春16秋西交《计算机图形学》在线作业 一、单选(共30 道,共60 分。) 1. 在三维造型中,不可以使用垂直扫掠造型方法构造的有( )。 A. 园柱 B. 长方体 C. 三棱锥 D. 正十二面体 标准解: 2. 在直线段的参数方程表示方法中,参数t的取值范围为( )。 A. 【0,1】 B. 【0,∞】 C. 【-1,1】 D. 【-1,0】 标准解: 3. 如果希望在CorelDRAW中创建的多个页面具有相同的图形元素,可以执行下面的哪一项操作( ) A. 先创建多个页面,然后分别在各个页面中绘制相同的图形元素 B. 创建一个页面并在此页面绘制需要的图形元素,然后再将此页面复制多个 C. 选择“Layout-Page Setup”命令,在弹出的对话框中进行设置 D. 在Master Page中创建一个图层,在此图层中绘制希望出现在各个页面中的图形元素,则此各个页面将具有相同的图形元素 标准解: 4. 下列有关平面几何投影的叙述,错误的是( )。 A. 透视投影又可分为一点透视、二点透视、三点透视 B. 斜投影又可分为等轴测、斜二测 C. 正轴测又可分为等轴测、正二测、正三测 D. 正视图又可分为主视图、侧视图、俯视图 标准解: 5. 要快速以递增的方式增大字体大小,可以利用“文本”工具选择特定的字符后,执行以下哪步操作( ) A. 按CTRL + "+"键 B. 双击“缩放”工具 C. 按CTRL + 数字小键盘上的"8" D. 按CTRL + 数字小键盘上的"2" 标准解: 6. 有M个控制顶点Pi(i=1,…k)所决定的n次B样曲线,由()段n次B样曲线段光滑连接而成。

计算机图形学实验报告 课程设计 大作业

安徽建筑工业学院 计算机图形学实验报告 院(系)名称: 专业: 班级: 姓名: 学号: 指导老师:

实验一实现任意直线的中点画线算法 【实验目的】 掌握直线的中点画线算法; 【实验环境】 VC++6.0 【实验内容】 利用任意的一个实验环境,编制源程序,实现直线的中点画线法。 【实验原理】 假定直线斜率k在0~1之间,当前象素点为(x p,y p),则下一个象素点有两种可选择点P1(x p+1,y p)或P2(x p+1,y p+1)。若P1与P2的中点(x p+1,y p+0.5)称为M,Q为理想直线与x=x p+1垂线的交点。当M在Q的下方时,则取P2应为下一个象素点;当M在Q的上方时,则取P1为下一个象素点。这就是中点画线法的基本原理。 图2.1.2 中点画线法每步迭代涉及的象素和中点示意图 下面讨论中点画线法的实现。过点(x0,y0)、(x1, y1)的直线段L的方程式为F(x, y)=ax+by+c=0,其中,a=y0-y1, b=x1-x0, c=x0y1-x1y0,欲判断中点M在Q点的上方还是下方,只要把M代入F(x,y),并判断它的符号即可。为此,我们构造判别式: d=F(M)=F(x p+1, y p+0.5)=a(x p+1)+b(y p+0.5)+c

当d<0时,M在L(Q点)下方,取P2为下一个象素; 当d>0时,M在L(Q点)上方,取P1为下一个象素; 当d=0时,选P1或P2均可,约定取P1为下一个象素; 注意到d是x p, y p的线性函数,可采用增量计算,提高运算效率。 若当前象素处于d 0情况,则取正右方象素P1(x p+1, y p),要判下一个象素位置,应计 算d1=F(x p+2, y p+0.5)=a(x p+2)+b(y p+0.5)=d+a,增量为a。 若d<0时,则取右上方象素P2(x p+1, y p+1)。要判断再下一象素,则要计算d2= F(x p+2, y p+1.5)=a(x p+2)+b(y p+1.5)+c=d+a+b ,增量为a+b。画线从(x0, y0)开始,d的初值d0=F(x0+1, y0+0.5)=F(x0, y0)+a+0.5b,因F(x0, y0)=0,所以d0=a+0.5b。 由于我们使用的只是d的符号,而且d的增量都是整数,只是初始值包含小数。因此,我们可以用2d代替d来摆脱小数,写出仅包含整数运算的算法程序。 【实验程序】 void Midpoint Line (int x0,int y0,int x1, int y1,int color) { int a, b, d1, d2, d, x, y; a=y0-y1; b=x1-x0;d=2*a+b; d1=2*a;d2=2* (a+b); x=x0;y=y0; drawpixel(x, y, color); while (x

相关主题
文本预览
相关文档 最新文档