文档库 最新最全的文档下载
当前位置:文档库 › 计算机图形学实验报告模板

计算机图形学实验报告模板

计算机图形学实验报告模板
计算机图形学实验报告模板

计算机图形学实验报告

姓名:___ __________

学号:_____ ________

班级:______ _______

时间:_____20XX年XX月_________

实验一OpenGL编程与图形绘制

1.实验目的

了解OpenGL编程,并熟悉OpenGL的主要功能、绘制流程和基本语法。学会配置OpenGL环境,并在该环境中编程绘图。

2.实验内容

OpenGL的主要功能:模型绘制、模型观察、颜色模式、光照应用、图像效果增强、位图和图像处理、纹理映射、实时动画和交互技术。

OpenGL的绘制流程分为两个方面:一个完整的窗口系统的OpenGL图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,最上面的层为应用软件;OpenGL命令将被放在一个命令缓冲区中,这样命令缓冲区中包含了大量的命令、顶点数据和纹理数据。当缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段。

OpenGL的基本语法中相关库有:OpenGL核心库:gl、OpenGL实用程序库:glu、OpenG 编程辅助库:aux、OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut、Windows 专用库:wgl。

OpenGL的基本语法中命名规则为:OpenGL函数都遵循一个命名约定,即采用以下格式:<库前缀><根命令><可选的参数个数><可选的参数类型>。

了解了上述基础知识后,配置好OpenGL环境,然后在该环境中编程练习图形的绘制,本次实验主要是对点的绘制、直线的绘制和多边形面的绘制。

3.实验代码及结果

3.1点的绘制:

#include

void Initial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色

glMatrixMode(GL_PROJECTION); //指定设置投影参数

gluOrtho2D(0.0,200.0,0.0,150.0); //设置投影参数

}

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); //用当前背景颜色填充窗口

glColor3f(1.0f,0.0f,0.0f); //设置当前的绘图颜色为红

// glRectf(50.0f,100.0f,150.0f,50.0f); //绘制一个矩形

glPointSize(10); //三个点

glBegin(GL_POINTS);

glColor3f(1.0f,0.0f,0.0f);

glVertex2i(2,148);

glVertex2i(100,75);

glVertex2i(198,2);

glEnd();

glFlush(); //清空OpenGL命令缓冲区,执行OpenGL程序}

int main(int argc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸glutInitWindowPosition(100,120); //设置窗口位置

glutCreateWindow("矩形"); //创建一个名为矩形的窗口glutDisplayFunc(Display); //设置当前窗口的显示回调函数

Initial(); //完成窗口初始化

glutMainLoop(); //完成窗口GLUT事件处理循环

return 0;

}

运行结果:

3.2直线的绘制:

#include

void Initial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色

glMatrixMode(GL_PROJECTION); //指定设置投影参数

gluOrtho2D(0.0,200.0,0.0,150.0); //设置投影参数

}

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); //用当前背景颜色填充窗口

glColor3f(1.0f,0.0f,0.0f); //设置当前的绘图颜色为红色

// glRectf(50.0f,100.0f,150.0f,50.0f); //绘制一个矩形

glBegin(GL_LINE_LOOP); //五角星

glVertex2i(10,10);

glVertex2i(30,35);

glVertex2i(50,10);

glVertex2i(5,25);

glVertex2i(55,25);

glEnd();

glFlush(); //清空OpenGL命令缓冲区,执行OpenGL程序}

int main(int argc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸glutInitWindowPosition(100,120); //设置窗口位置

glutCreateWindow("矩形"); //创建一个名为矩形的窗口glutDisplayFunc(Display); //设置当前窗口的显示回调函数

Initial(); //完成窗口初始化

glutMainLoop(); //完成窗口GLUT事件处理循环

return 0;

}

运行结果:

3.3多边形面的绘制:

#include

void Initial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色

glMatrixMode(GL_PROJECTION); //指定设置投影参数

gluOrtho2D(0.0,200.0,0.0,150.0); //设置投影参数

}

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); //用当前背景颜色填充窗口

glColor3f(1.0f,0.0f,0.0f); //设置当前的绘图颜色为红色

// glRectf(50.0f,100.0f,150.0f,50.0f); //绘制一个矩形

glBegin(GL_TRIANGLES); //等边三角形

glVertex2f(0.0,0.0);

glVertex2f(15,25.95);

glVertex2f(30,0);

glEnd();

glFlush(); //清空OpenGL命令缓冲区,执行OpenGL程序}

int main(int argc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸glutInitWindowPosition(100,120); //设置窗口位置

glutCreateWindow("矩形"); //创建一个名为矩形的窗口glutDisplayFunc(Display); //设置当前窗口的显示回调函数

Initial(); //完成窗口初始化

glutMainLoop(); //完成窗口GLUT事件处理循环

return 0;

}

运行结果:

实验二直线绘制实验

1.实验目的

为了进一步熟悉OpenGL编程,了解基本图形生成算法中的直线绘制,学会直线绘制算法中最常用的三种算法:数值微分法、中点画线算法和Bresenham算法。

2.实验内容

(一)数值微分法

数值微分法直接从直线的微分方程生成直线。给定直线的两端点:P0(X0,Y0)和P1(X1,Y1),得到直线的微分方程dy/dx=△y/△x=(Y1-Y0)/(X1-X0)=k。

数值微分算法的原理是,由于直线的一阶导数是连续的,而且△x和△y是成比例的,因此通过在当前位置(Xi,Yi)分别加上两个小增量ε△x和ε△y(ε为无穷小的正数)来

求下一点(X(i+1),Y(i+1))的x,y坐标。

(二)中点画线算法

给定直线的两端点:P0(X0,Y0)和P1(X1,Y1),可得到直线方程F(x,y)=y-kx-b=0且k=△y/△x=(Y1-Y0)/(X1-X0)。

绘图过程如下:

○1.输入直线的两端点P0(X0,Y0)和P1(X1,Y1)。

○2.计算初始值△x, △y,d=△x-2△y,x=X0,y=Y0.

○3.绘制点(x,y)。判断d的符号,若d<0,则(x,y)更新为(x+1,y+1),d更新为d+2△x-2△y;否则(x,y)更新为(x+1,y),d更新为△y。

○4.当直线没有画完时,重复步骤○3,否则结束。

(三)Bresenham算法

算法步骤如下:

○1.输入直线两端点P0(X0,Y0)和P1(X1,Y1)。

○2.计算初始值△x, △y,e=-△x,x=X0,y=Y0。

○3.绘制点(x,y)。

○4.e更新为e+2△y。判断e的符号,若e>0,则(x,y)更新为(x+1,y+1),同样将e更新为e-2△x;否则(x,y)更新为(x+1,y)。

○5.当直线没有画完时,重复步骤○3和○4;否则结束。

3.实验代码及结果

3.1数值微分算法编程绘制直线代码:

#include

#include

void Initial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色

glMatrixMode(GL_PROJECTION); //指定设置投影参数

gluOrtho2D(0.0,200.0,0.0,150.0); //设置投影参数

}

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); //用当前背景颜色填充窗口

glColor3f(1.0f,0.0f,0.0f); //设置当前的绘图颜色为红色

glBegin(GL_LINES);

int x0=10;int y0=20;int x1=30;int y1=40;int color=10;

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

{

glVertex2i(int(x+0.5),(int)(y+0.5));

x+=xIncre;

y+=yIncre;

}

glEnd();

glFlush(); //清空OpenGL命令缓冲区,执行OpenGL程序}

int main(int argc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸glutInitWindowPosition(100,120); //设置窗口位置

glutCreateWindow("矩形"); //创建一个名为矩形的窗口glutDisplayFunc(Display); //设置当前窗口的显示回调函数

Initial(); //完成窗口初始化

glutMainLoop(); //完成窗口GLUT事件处理循环

return 0;

}

实验结果:

2.2中点画线算法编程绘制直线代码:

#include

#include

void Initial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色

glMatrixMode(GL_PROJECTION); //指定设置投影参数

gluOrtho2D(0.0,200.0,0.0,150.0); //设置投影参数

}

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); //用当前背景颜色填充窗口glColor3f(1.0f,0.0f,0.0f); //设置当前的绘图颜色为红色glBegin(GL_POINTS);

int x0=50;int y0=20;int x1=100;int y1=120;int color=10;

int dx,dy,d,UpIncre,DownIncre,x,y;

if(x0>x1)

{

x=x1;x1=x0;x0=x;

y=y1;y1=y0;y0=y;

}

x=x0;y=y0;

dx=x1-x0;dy=y1-y0;

d=dx-2*dy;

UpIncre=2*dx-2*dy; DownIncre=2*dy;

while(x<=x1)

{

glVertex2i(x,y);

x++;

if(d<0)

{

y++;

d+=UpIncre;

}

else d+=DownIncre;

}

glEnd();

glFlush(); //清空OpenGL命令缓冲区,执行OpenGL程序}

int main(int argc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸glutInitWindowPosition(100,120); //设置窗口位置

glutCreateWindow("矩形"); //创建一个名为矩形的窗口glutDisplayFunc(Display); //设置当前窗口的显示回调函数

Initial(); //完成窗口初始化

glutMainLoop(); //完成窗口GLUT事件处理循环

return 0;

}

实验结果:

2.3Bresenham算法编程绘制直线代码:

#include

#include

void Initial(void){

glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION);//指定设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0);//设置投影参数

}

void Display(void){

glClear(GL_COLOR_BUFFER_BIT);//用当前背景色填充窗口glColor3f(1.0f,0.0f,0.0f);//设置当前的绘图颜色为红色

//Bresenham算法

glBegin(GL_POINTS);

int x0 = 10;int y0 = 20;int x1 = 90;int y1 = 90;int color=10;

int x,y,dx,dy,e;

dx = x1-x0;dy = y1-y0;

e=-dx;x=x0;y=y0;

while(x<=x1){

glVertex2i(x,y);

x++;

e=e+2*dy;

if(e>0){

y++;

e=e-2*dx;

}

}

glEnd();

glFlush();//清空OpenGL命令缓冲区,执行OpenGL程序

}

int main(int argc,char*argv[]){

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//初始化窗口的现实模式glutInitWindowSize(400,300);//设置窗口的尺寸

glutInitWindowPosition(100,200);//设置窗口的位置

glutCreateWindow("点");//创建一个名为矩形的窗口

glutDisplayFunc(Display);//设置当前窗口的显示函数

Initial();//完成窗口的初始化

glutMainLoop();//启动主GLUT事件处理循环

return 0;

}

实验结果:

实验三圆绘制实验

1.实验目的

2.实验内容

(一)八分法画圆

圆心位于原点的圆有4条对称轴x=0,y=0,y=x,y=-x。若已知圆上任一点(x,y),可以得到其在圆周上关于四条对称轴的另外7个点(y,x),(-x,y),(-x,-y),(-y,-x),(y,-x),(x,-y)。

(二)中点Bresenham画圆算法

算法步骤如下:

○1输入圆的半径R

○2计算初始值d=1-R,x=0,y=R。

○3绘制点(x,y)及其在八分圆中的另外7个对称点。

○4判断d的符号。若d<0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。

○5当x

(三)椭圆的中点Bresenham算法

算法步骤如下:

○1输入椭圆的长半轴a和短半轴b。

○2计算初始值d=b^2+a^2(-b+0.25),x=0,y=b。

○3绘制点(x,y)及其在四分象限上的另外三个对称点。

○4判断d的符号。若d<=0,则先将d更新为d+b^2(2x+3),再将(x,y)更新为(x+1,y);否则先将d更新为d+b^2(2x+3)+a^2(-2y+2),再将(x,y)更新为(x+1,y-1)。

○5当b^2(x+1)

○6用上半部分计算的最后点(x,y)来计算下半部分中d的初值d=b^2(x+0.5)^2+a^2(y-1)^2-a^2b^2

○7绘制点(x,y)及其在四分象限上的另外三个对称点。

○8判断d的符号。若d<=0,则先将d更新为d+b^2(2x+2)+a^2(-2y+3),再将(x,y)更新为(x+1,y-1);否则先将d更新为d+a^2(-2y+3),再将(x,y)更新为(x,y-1)。

○9当y>=0时,重复步骤○7和○8;否则结束。

3.实验代码及结果

3.1八分法画圆程序代码:

#include

#include

void Initial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色

glMatrixMode(GL_PROJECTION); //指定设置投影参数

gluOrtho2D(0.0,200.0,0.0,150.0); //设置投影参数

}

void CirclePoint(int x,int y,int color){

glVertex2i(x+50,y+50);

glVertex2i(y+50,x+50);

glVertex2i(-y+50,x+50);

glVertex2i(-x+50,y+50);

glVertex2i(-x+50,-y+50);

glVertex2i(-y+50,-x+50);

glVertex2i(y+50,-x+50);

glVertex2i(x+50,-y+50);

}

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); //用当前背景颜色填充窗口

glColor3f(1.0f,0.0f,0.0f); //设置当前的绘图颜色为红色

glPointSize(10);

glBegin(GL_POINTS);

CirclePoint(10,20,20);

glEnd();

glFlush(); //清空OpenGL命令缓冲区,执行OpenGL程序}

int main(int argc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸glutInitWindowPosition(100,120); //设置窗口位置

glutCreateWindow("矩形"); //创建一个名为矩形的窗口glutDisplayFunc(Display); //设置当前窗口的显示回调函数Initial(); //完成窗口初始化glutMainLoop(); //完成窗口GLUT事件处理循环return 0;

}

实验结果:

3.2中点Bresenham 算法绘制圆代码

#include

#include

void Initial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色

glMatrixMode(GL_PROJECTION); //指定设置投影参数

gluOrtho2D(0.0,200.0,0.0,150.0); //设置投影参数

}

void CirclePoint(int x,int y,int color){

glVertex2i(x+50,y+50);

glVertex2i(y+50,x+50);

glVertex2i(-y+50,x+50);

glVertex2i(-x+50,y+50);

glVertex2i(-x+50,-y+50);

glVertex2i(-y+50,-x+50);

glVertex2i(y+50,-x+50);

glVertex2i(x+50,-y+50);

}

void MidBresenhamCircle(int r,int color)

{

int x,y,d;

x=0;y=r;d=1-r;

while(x<=y)

{

CirclePoint(x,y,color);

if(d<0)

d+=2*x+3;

else

{

d+=2*(x-y)+5;

y--;

}

x++;

}

}

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); //用当前背景颜色填充窗口

glColor3f(1.0f,0.0f,0.0f); //设置当前的绘图颜色为红色

glPointSize(3);

glBegin(GL_POINTS);

MidBresenhamCircle(20,10);

glEnd();

glFlush(); //清空OpenGL命令缓冲区,执行OpenGL程序}

int main(int argc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸glutInitWindowPosition(100,120); //设置窗口位置

glutCreateWindow("矩形"); //创建一个名为矩形的窗口glutDisplayFunc(Display); //设置当前窗口的显示回调函数

Initial(); //完成窗口初始化

glutMainLoop(); //完成窗口GLUT事件处理循环return 0;

}

实验结果:

3.3中点Bresenham 算法绘制椭圆代码:

#include

#include

void Initial(void)

{

glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色

glMatrixMode(GL_PROJECTION); //指定设置投影参数

gluOrtho2D(0.0,200.0,0.0,150.0); //设置投影参数

}

void MidBresenhamEllipse(int a,int b,int color)

{

int x,y;

float d1,d2;

x=0;y=b;

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

glVertex2i(x+50,y+50); glVertex2i(-x+50,-y+50);

glVertex2i(-x+50,y+50); glVertex2i(x+50,-y+50);

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--;

}

glVertex2i(x+50,y+50); glVertex2i(-x+50,-y+50);

glVertex2i(-x+50,y+50); glVertex2i(x+50,-y+50);

}

d2=b*b*(x+0.5)*(x+0.5)+a*a*(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--;

}

glVertex2i(x+50,y+50); glVertex2i(-x+50,-y+50);

glVertex2i(-x+50,y+50); glVertex2i(x+50,-y+50);

}

}

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); //用当前背景颜色填充窗口

glColor3f(1.0f,0.0f,0.0f); //设置当前的绘图颜色为红色

glPointSize(3);

glBegin(GL_POINTS);

MidBresenhamEllipse(40,25,10);

glEnd();

glFlush(); //清空OpenGL命令缓冲区,执行OpenGL程序}

int main(int argc,char*argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //初始化窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸glutInitWindowPosition(100,120); //设置窗口位置

glutCreateWindow("矩形"); //创建一个名为矩形的窗口

glutDisplayFunc(Display); //设置当前窗口的显示回调函数

Initial(); //完成窗口初始化

glutMainLoop(); //完成窗口GLUT事件处理循环

return 0;

}

实验结果:

实验四填充算法实验

1.实验目的

掌握用扫描线种子填充法,实现扫描线种子填充算法填充任一多边形区域的程序

2.实验内容

算法步骤如下:

(1)种子像素入栈。

(2)执行如下三步操作:

○1栈顶像素出栈。

○2填充出栈像素所在扫描线的连续像素段,从出栈的像素开始沿扫描线向左和向右填充,直到遇到边界像素为止,即每出栈一个像素,就对包含该像素的整个扫描线区间进行填充,

并且记录下此时扫描线区间的x坐标范围[x1,x2]。

○3分别检查上、下两条扫描线上位于[x1,x2]坐标区间内的未被填充的连续水平像素段,将每个连续像素段的最左像素取作种子像素压人栈堆。

(3)检查栈是否为空,若栈非空重复执行步骤(2),若栈为非空则结束。

3.实验代码及结果

代码:

#include "gl/glut.h"

#include "math.h"

#include "stdlib.h"

#include "conio.h"

#include

typedef float Color[3];

struct Point

{

GLint x;

GLint y;

};

std::stack stk;

void init(void)

{

glClearColor(1.0,1.0,1.0,1.0);//Set display-window color white.

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,400.0,0.0,400.0);

}

void setPixel(GLint x,GLint y);//种子像素坐标

void setPixel(Point cur_point)

{

glBegin(GL_POINTS);

glVertex2i(cur_point.x,cur_point.y);

glEnd();

glFlush();

}

void getPixel(Point cur_point,Color c)

{

glReadPixels(cur_point.x,cur_point.y,1,1,GL_RGB,GL_FLOAT,c);

}

bool rgbColorEqual(Color c1,Color c2)

{

//c1颜色数据与c2颜色数据,当正负误差不超过0.0001时,返回值为1,否则为0

if((abs(c1[0]-c2[0])>0.001)||(abs(c1[1]-c2[1])>0.001)||(abs(c1[2]-c2[2])>0.001)) return 0;

else return 1;

《计算方法》课内实验报告

《计算方法》实验报告 姓名: 班级: 学号: 实验日期: 2011年10月26日

一、实验题目: 数值积分 二、实验目的: 1.熟悉matlab 编写及运行数值计算程序的方法。 2.进一步理解数值积分的基础理论。 3.进一步掌握应用不同的数值积分方法求解给定的积分并给出数据结果及误差分析。 三、实验内容: 1.分别用复合梯形求积公式及复合辛普森求积公式计算积分xdx x ln 10 ? , 要求计算精度达到410-,给出计算结果并比较两种方法的计算节点数. 2.用龙贝格求积方法计算积分dx x x ?+3 021,使误差不超过510-. 3.用3=n 的高斯-勒让德公式计算积分?3 1 sin x e x ,给出计算结果. 4.用辛普森公式(取2==M N ) 计算二重积分.5 .00 5 .00 dydx e x y ? ? - 四、实验结果: 1.(1)复合梯形法: 将区间[a,b]划分为n 等份,分点n k n a b h kh a x k ,2,1,0,,=-=+=在每个区间[1,+k k x x ](k=0,1,2,···n-1)上采用梯形公式,则得 )()]()([2)()(1 11 1 f R x f x f h dx x f dx x f I n n k k k b a n k x x k k ++===∑?∑? -=+-=+ 故)]()(2)([21 1 b f x f a f h T n k k n ++=∑-=称为复合梯形公式 计算步长和划分的区间 Eps=1E-4 h1=sqrt(Eps/abs(-(1-0)/12*1/(2+1))) h1 =0.0600 N1=ceil(1/h1) N1 =17 用复合梯形需要计算17个结点。 复合梯形: function T=trap(f,a,b,n) h=(b-a)/n;

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

计算方法上机实验报告

. / 《计算方法》上机实验报告 班级:XXXXXX 小组成员:XXXXXXX XXXXXXX XXXXXXX XXXXXXX 任课教师:XXX 二〇一八年五月二十五日

前言 通过进行多次的上机实验,我们结合课本上的内容以及老师对我们的指导,能够较为熟练地掌握Newton 迭代法、Jacobi 迭代法、Gauss-Seidel 迭代法、Newton 插值法、Lagrange 插值法和Gauss 求积公式等六种算法的原理和使用方法,并参考课本例题进行了MATLAB 程序的编写。 以下为本次上机实验报告,按照实验内容共分为六部分。 实验一: 一、实验名称及题目: Newton 迭代法 例2.7(P38):应用Newton 迭代法求在附近的数 值解,并使其满足. 二、解题思路: 设'x 是0)(=x f 的根,选取0x 作为'x 初始近似值,过点())(,00x f x 做曲线)(x f y =的切线L ,L 的方程为))((')(000x x x f x f y -+=,求出L 与x 轴交

点的横坐标) (') (0001x f x f x x - =,称1x 为'x 的一次近似值,过点))(,(11x f x 做曲线)(x f y =的切线,求该切线与x 轴的横坐标) (') (1112x f x f x x - =称2x 为'x 的二次近似值,重复以上过程,得'x 的近似值序列{}n x ,把) (') (1n n n n x f x f x x - =+称为'x 的1+n 次近似值,这种求解方法就是牛顿迭代法。 三、Matlab 程序代码: function newton_iteration(x0,tol) syms z %定义自变量 format long %定义精度 f=z*z*z-z-1; f1=diff(f);%求导 y=subs(f,z,x0); y1=subs(f1,z,x0);%向函数中代值 x1=x0-y/y1; k=1; while abs(x1-x0)>=tol x0=x1; y=subs(f,z,x0); y1=subs(f1,z,x0); x1=x0-y/y1;k=k+1; end x=double(x1) K 四、运行结果:

会计信息系统实验报告模板

会计信息系统实验报告模板 一、实验目的 1.掌握会计信息系统中系统管理的相关内容,理解系统管理在整个系统中的重要性,理解操作员权限设置的重要意义。 2.掌握会计信息系统中基础档案设置的有关内容,理解基础档案设置在整个系统中的作用。 3.掌握会计信息系统中总账子系统初始设置与日常业务处理的相关内容,理解初始设置的意义,熟悉具体内容和操作方法。 4.掌握工资子系统的相关内容,熟悉工资子系统初始化,日常业务处理,工资分摊及月末处理操作。 5.掌握固定资产管理子系统中的相关内容,熟悉固定资产管理子系统初始化,日常业务处理及月末处理操作。 6.掌握总账子系统月末处理的相关内容,熟悉月末处理的各种操作,掌握银行对账、自动转账设置与生成、对账和月末结账的操作方法。 7.理解财务报表编制的原理及流程,掌握报表格式定义、公式定义的操作方法,掌握报表单元公式的设置方法,掌握报表数据处理、表页管理及图表功能等操作,掌握利用报表模板生成会计报表的方法。 8.通过综合实验,巩固单项实验中掌握的各模块操作技能并综合理解掌握,进一步提高会计信息系统综合实务操作能力。 二、实验内容 1.建立账套。 2.操作员及权限设置。 3.基础信息设置。 4.总账子系统、工资子系统、固定资产子系统初始化。 5.根据业务资料填制记账凭证(工资业务和固定资产业务分别在工资子系统和固定资产子系统处置后生成记账凭证向总账子系统传递)。 6.对填制和生成的凭证进行审核、记账。

7.账簿查询。 8.月末结账。 9. 编制资产负债表和利润表。 三、实验步骤 (一)建立账套及操作员权限设置(二)基础信息设置(三)总账系统基本设置(四)总账系统日常业务处理(五)工资管理(六)固定资产管理(七)月末对账与结账(八)编制报表 编制资产负债表和编制利润表 四、实验结果 1. 余额及发生额表 2. 凭证清单

太原理工大学数值计算方法实验报告

本科实验报告 课程名称:计算机数值方法 实验项目:方程求根、线性方程组的直接解 法、线性方程组的迭代解法、代数插值和最 小二乘拟合多项式 实验地点:行勉楼 专业班级: ******** 学号: ********* 学生姓名: ******** 指导教师:李誌,崔冬华 2016年 4 月 8 日

y = x*x*x + 4 * x*x - 10; return y; } float Calculate(float a,float b) { c = (a + b) / 2; n++; if (GetY(c) == 0 || ((b - a) / 2) < 0.000005) { cout << c <<"为方程的解"<< endl; return 0; } if (GetY(a)*GetY(c) < 0) { return Calculate(a,c); } if (GetY(c)*GetY(b)< 0) { return Calculate(c,b); } } }; int main() { cout << "方程组为:f(x)=x^3+4x^2-10=0" << endl; float a, b; Text text; text.Getab(); a = text.a; b = text.b; text.Calculate(a, b); return 0; } 2.割线法: // 方程求根(割线法).cpp : 定义控制台应用程序的入口点。// #include "stdafx.h" #include"iostream"

心得体会 使用不同的方法,可以不同程度的求得方程的解,通过二分法计算的程序实现更加了解二分法的特点,二分法过程简单,程序容易实现,但该方法收敛比较慢一般用于求根的初始近似值,不同的方法速度不同。面对一个复杂的问题,要学会简化处理步骤,分步骤一点一点的循序处理,只有这样,才能高效的解决一个复杂问题。

计算机图形学实验报告 (2)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

数值计算实验报告

(此文档为word格式,下载后您可任意编辑修改!) 2012级6班###(学号)计算机数值方法 实验报告成绩册 姓名:宋元台 学号: 成绩:

数值计算方法与算法实验报告 学期: 2014 至 2015 第 1 学期 2014年 12月1日课程名称: 数值计算方法与算法专业:信息与计算科学班级 12级5班 实验编号: 1实验项目Neton插值多项式指导教师:孙峪怀 姓名:宋元台学号:实验成绩: 一、实验目的及要求 实验目的: 掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。 实验要求: 1. 给出Newton插值算法 2. 用C语言实现算法 二、实验内容 三、实验步骤(该部分不够填写.请填写附页)

1.算法分析: 下面用伪码描述Newton插值多项式的算法: Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x. Step2 形成差商表 for i=0 to n for j=n to i f(j)=((f(j)-f(j-1)(x(j)-x(j-1-i)); Step3 置初始值temp=1,newton=f(0) Step4 for i=1 to n temp=(x-x(i-1))*temp*由temp(k)=(x-x(k-1))*temp(k-1)形成 (x-x(0).....(x-x(i-1)* Newton=newton+temp*f(i); Step5 输出f(x)的近似数值newton(x)=newton. 2.用C语言实现算法的程序代码 #includeMAX_N) { printf("the input n is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(n<=0) { printf("please input a number between 1 and %d.\n",MAX_N); return 1; } printf("now input the (x_i,y_i)i=0,...%d\n",n); for(i=0;i<=n;i++) { printf("please input x(%d) y(%d)\n",i,i);

管理信息系统实验报告书1.doc

管理信息系统实验报告书1 本科生实验报告书 管理信息系统(实验) Management Information System (Experiment) 课程名管理信息系统(实验) 课程编号S1520063 学生姓名覃嘉琪、朱晓敏、罗婉兰、卢晓娜 所在专业工商1073第三小组 所在班级工商1073班 指导教师杜军职称讲师 实验时间2009-2010学年第一学期 编制者:杜军 二00九年九月 一、系统分析部分 1)小型商场里进货、销售、库存三大功能的文字描述。 小型商场进销存管理是商场后台管理的核心,也是整个商业自动化管理最基本、最重要的应用,

它直接影响了企业的经济效益。 系统包括基本信息管理、销售管理、进货管理、库存管理。首先,小型商场销售管理系统包括销售登记、销售信息统计、员工销售信息统计组成。主要完成商品销售工作,记录顾客购买信息、管理销售价格、处理应收货款及退款,统计员工的销售业绩,通过条件查询商品的销售信息。通过对顾客资料的全方位、多层次的管理,使小型商场与供应商之间实现流通机能的整合,小型商场与顾客之间实现信息分享和收益及风险共享;进货管理系统由进货登记和进货信息查询组成,完成商品的入库登记并进行货品验收,按条件查询商品的入库信息,为及时掌握商品库存情况,制定发出订购信息或接收厂商的出货信息制定采购计划、采购价格管理等。最后,库存功能主要是有仓库商品存储情况,日库存统计,月库存统计,打印清单。该系统可以对仓库资源实现集中管理,根据库存情况可以进行库存日盘点和月盘点,根据企业领导和自身管理的需要按月、季度、年度进行统计分析,产生相应清单。为了加强关键物资、设备的管理,要定期掌握其储备,消耗情况,根据计划定额和实际纤毫定额的比较,进行定额管理,使得资金使用合理,物资设备的储备最佳。 另外,本系统可统计销售员的工作业绩,提供人事管理参考。通过过本系统除可以提高商场运作效率,还可以使管理者实时了解商品的销售情况,及早根据当前的情况制定订货和销售计划,以保证商场能够长期稳定发展。2)小型商场的组织结构图 34)小型商场的业务流程图 5)小型商场的数据流程图

c 计算器实验报告

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 6.0中建立一个MFC工程文件,名为 calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单 选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在calculatorDlg.h中添加math.h头文件,然后添加public成 员。 7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始 化和完善各控件的响应函数代码。 (3)程序清单:

●添加的public成员: double tempvalue; //存储中间变量 double result; //存储显示结果的值 int sort; //判断后面是何种运算:1.加法2.减法3. 乘法 4.除法 int append; //判断后面是否添加数字 ●成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = 0.0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0; result=0; sort=0; append=0; }

计算机图形学实验报告

目录

实验一直线的DDA算法 一、【实验目的】 1.掌握DDA算法的基本原理。 2.掌握DDA直线扫描转换算法。 3.深入了解直线扫描转换的编程思想。 二、【实验内容】 1.利用DDA的算法原理,编程实现对直线的扫描转换。 2.加强对DDA算法的理解和掌握。 三、【测试数据及其结果】 四、【实验源代码】 #include

#include #include #include GLsizei winWidth=500; GLsizei winHeight=500; void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } void DDALine(int x0,int y0,int x1,int y1) { glColor3f(1.0,0.0,0.0); 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++) { glPointSize(3); glBegin(GL_POINTS); glV ertex2i(int(x+0.5),(int)(y+0.5)); glEnd(); x+=xIncre; y+=yIncre; } } void Display(void) { glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180); glFlush(); }

计算方法实验报告

计算方法实验报告(四) 方程和方程组的迭代解法 一、实验问题 利用简单迭代法,两种加速技术,牛顿法,改进牛顿法,弦割法求解习题5-1,5-2,5-3中的一题,并尽可能准确。 选取5-3:求在x=1.5附近的根。 二、问题的分析(描述算法的步骤等) (1)简单迭代法算法: 给定初始近似值,求的解。 Step 1 令i=0; Step 2 令(计算); Step 3 如果,则迭代终止,否则重复Step 2。 (2)Aitken加速法算法 Step 1 令k=0,利用简单迭代算法得到迭代序列; Step 2 令-(计算得到一个新的序列,其中k=0,1,2…);Step 3 如果,则迭代终止,否则重复Step 2。 (3)插值加速法算法 Step 1 令k=0,利用简单迭代算法得到迭代序列; Step 2 令+(计算得到一个新的序列,其中k=1,2,3…); Step 3 如果,则迭代终止,否则重复Step 2。 (4)牛顿法算法

Step 1给定初始近似值; Step 2令,其中k计算得到的序列; Step 3如果,则迭代终止,否则重复Step 2。 (5)改进牛顿法的算法 Step 1给定初始近似值; Step 2令,其中k迭代计算得到的序列; Step 3如果,则迭代终止,否则重复Step 2。 (6)弦割法算法(双点弦割法) Step 1给定初始近似值,; Step 2令其中k计算得到的序列; Step 3如果,则迭代终止,否则重复Step 2。 三、程序设计 (1)简单迭代法 利用迭代公式进行迭代运算。 #include #include #include double fun(double x) { double c=1+x*x; return pow(c,1/3.0); } void main() { double x=1.5; double y=0; double D=1;

管理信息系统实验报告模板

实验报告 课程名称:管理信息系统专业班级: 学号: 学生姓名: 指导教师: 成绩: 2011 年11月25 日

管理信息系统实验报告 一、实验目的与要求 1掌握企业在进行期初建账时,如何进行核算体系的建立及各项基础档案的设置。2掌握企业为了在将来的业务处理时,能够由系统自动生成有关的凭证。在进行期初建账时,应如何设置相关业务的入账科目。以及如何把原来手工做账时,所涉及到的各业务的期末余额录入至系统当中。 3掌握企业在日常业务中如何通过软件来处理采购入库业务及相关帐表查询 4掌握企业在日常业务中如何通过软件来处理销售出库业务及相关帐表查询 二、仪器用具 1.局域网及工作站 2.U8-ERP系统 三、实验原理 根据实验指导书完成核算体系的建立、各系统的启用、定义各项基础档案、设置基础科目、期初余额的整理录入、最后完成出入库管理、采购管理、销售管理的日常工作。 四、实验方法与步骤 一、核算体系的建立 (一)启动系统管理,以“Admin”的身份进行注册。 (二)增设三位操作员:([权限] → [操作员]) 001代方,002宋岚,003赵红兵。 (三)建立账套信息:([账套] → [建立]) 1.账套信息:账套号666,输入账套名称(供应链帐套),启用日期为2010年1月。

2.单位信息:单位名称()如为“ABC有限公司”,单位简称为“ABC”,税号为3502256437218 3.核算类型:企业类型为“工业”,行业性质为“新会计制度科目”并预置科目,账套主管选“代方”。 4.基础信息:存货、客户及供应商均分类,有外币核算。 5.编码方案:A 客户分类和供应商分类的编码方案为2 B 部门编码的方案为12 C存货分类的编码方案为2233 D收发类别的编码级次为11 E结算方式的编码方案为2 F其他编码项目保持不变 说明:设置编码方案主要是为了以后分级核算,统计和管理打下基础, 6.数据精度:保持系统默认设置. 说明:设置数据精度主要是为了核算更精确 (四)分配操作员权限:([权限]→权限]) 操作员宋岚:拥有“共用目录设置”,“应收”,“应付”,“采购管理”,“销售管理”,“库存管理”,“存货核算”中的所有权限。 操作员赵红兵:拥有“共用目录设置”,“库存管理”,“存货核算”中的所有权限.二、各系统的启用: (一)启动企业门户,以账套主管身份进行注册(操作日期:2010-01-01)。(二)启用“采购管理”、“销售管理”、“库存管理”、“存货核算”、“应收”、“应付”、“总账”系统。启用日期为2010-01-01。 三、定义各项基础档案: (一)定义部门档案:(基础档案→机构人员→部门档案) (二)定义人员档案:(基础档案→机构人员→人员档案) (三)定义客户分类:(基础档案→客商信息→客户分类) (四)定义客户档案:(基础档案→客商信息→客户档案) (五)定义供应商分类:(基础档案→客商信息→供应商分类) (六)定义供应商档案:(基础档案→客商信息→供应商档案) (七)定义计量单位:(基础档案→存货→计量单位) (八)定义存货分类:(基础档案→存货→存货分类) (九)定义存货档案:(基础档案→存货→存货档案) (十)设置会计科目:(基础档案→财务→会计科目) 应收帐款,预收帐款设为“客户往来” 应付帐款,预付帐款设为“供应商往来” (十一)定义凭证类别(基础档案→财务→凭证类别) 定义凭证类别为“记账凭证”

计算方法实验报告格式

计算方法实验报告格式 小组名称: 组长姓名(班号): 小组成员姓名(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一个完整的实验,应包括数据准备、理论基础、实验内容及方法,最终对实验结果进行分析,以达到对理论知识的感性认识,进一步加深对相关算法的理解,数值实验以实验报告形式完成,实验报告格式如下: 一、实验名称 实验者可根据报告形式需要适当写出. 二、实验目的及要求 首先要求做实验者明确,为什么要做某个实验,实验目的是什么,做完该实验应达到什么结果,在实验过程中的注意事项,实验方法对结果的影响也可以以实验目的的形式列出. 三、算法描述(实验原理与基础理论) 数值实验本身就是为了加深对基础理论及方法的理解而设置的,所以要求将实验涉及到的理论基础,算法原理详尽列出. 四、实验内容 实验内容主要包括实验的实施方案、步骤、实验数据准备、实验的算法以及可能用到的仪器设备. 五、程序流程图 画出程序实现过程的流程图,以便更好的对程序执行的过程有清楚的认识,在程序调试过程中更容易发现问题. 六、实验结果 实验结果应包括实验的原始数据、中间结果及实验的最终结果,复杂的结果可以用表格

形式列出,较为简单的结果可以与实验结果分析合并出现. 七、实验结果分析 实验结果分析包括对对算法的理解与分析、改进与建议. 数值实验报告范例 为了更好地做好数值实验并写出规范的数值实验报告,下面给出一简单范例供读者参考. 数值实验报告 小组名称: 小组成员(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一、实验名称 误差传播与算法稳定性. 二、实验目的 1.理解数值计算稳定性的概念. 2.了解数值计算方法的必要性. 3.体会数值计算的收敛性与收敛速度. 三、实验内容 计算dx x x I n n ? += 1 10 ,1,2,,10n = . 四、算法描述 由 dx x x I n n ? += 1 10 ,知 dx x x I n n ?+=--101110,则

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号:20112497 班级:计算机科学与技术11-2班实验地点:逸夫楼507 实验时间:2014.03

实验1直线的生成 1实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析 实验数据的能力; 编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的 直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记 录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编 制成表格,并绘制折线图比较两种算法的性能。 2实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One(自制平台)。 本实验提供名为 Experiment_Frame_One的平台,该平台提供基本 绘制、设置、输入功能,学生在此基础上实现DDA算法和Mid_Bresenham 算法,并进行分析。 ?平台界面:如错误!未找到引用源。所示 ?设置:通过view->setting菜单进入,如错误!未找到引 用源。所示 ?输入:通过view->input…菜单进入.如错误!未找到引用 源。所示 ?实现算法: ◆DDA算法:void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) Mid_Bresenham法:void CExperiment_Frame_OneView::Mid_Bresenham(int X0, int Y0, int X1, int Y1)

3实验结果 3.1程序流程图 1)DDA算法流程图:开始 定义两点坐标差dx,dy,以及epsl,计数k=0,描绘点坐标x,y,x增 量xIncre,y增量yIncre ↓ 输入两点坐标x1,y1,x0,y0 ↓ dx=x1-x0,dy=y1-y0; _________↓_________ ↓↓ 若|dx|>|dy| 反之 epsl=|dx| epsl=|dy| ↓________...________↓ ↓ xIncre=dx/epsl; yIncre=dy/epsl ↓ 填充(强制整形)(x+0.5,y+0.5); ↓←←←← 横坐标x+xIncre; 纵坐标y+yIncre; ↓↑ 若k<=epsl →→→k++ ↓ 结束 2)Mid_Bresenham算法流程图开始 ↓ 定义整形dx,dy,判断值d,以及UpIncre,DownIncre,填充点x,y ↓ 输入x0,y0,x1,y1 ______↓______ ↓↓ 若x0>x1 反之 x=x1;x1=x0;x0=x; x=x0;

数学计算方法实验报告

数学计算方法实验报告 习题二 2.估计用二分法求方程f(x)=x3+4x2-10=0在区间[1,2]内根的近似值,为使方程不超过10时所需的二分次数。f(x k) 程序过程: function two (tolerance) a=1;b=2;counter=0; while (abs(b-a)>tolerance) c=(a+b)/2; fa=a^3+4*a^2-10;

fb=b^3+4*b^2-10; fc=c^3+4*c^2-10; if ((fa==0|fb==0)) disp(counter); elseif (fa*fc<0) b=c;counter=counter+1; elseif (fb*fc<0) a=c;counter=counter+1; elseif (fb==0) disp(counter); end end solution=(a+b)/2; disp(solution); disp(counter); 实验结果: 6.取x0=1.5,用牛顿迭代法求第三中的方程根.f(x)=x3+4x2-10=0的近似值(精确到||x k+1-x k|≦10-5,并将迭代次数与3题比较。 程序过程: function six (g) a=1.5; fa=a^3+4*a^2-10;

ga=3*a^2+8*a; b=a-fa/ga; k=1; while(abs(b-a)>g) a=b; fa=a^3+4*a^2-10; ga=3*a^2+8*a; b=a-fa/ga; k=k+1; end format long; disp(a); disp(k); 实验结果:程序结果计算结果 8.用弦割法求方程f(x)=x3-3x2-x+9=0在区间[-2,-1]内的一个实根近似值x k,|f(x k)|≦10-5. 程序过程: function eight (t) a=-2; b=-1; fa=a^3-3*a^2-a+9; fb=b^3-3*b^2-b+9; c=b-fb*(b-a)/(fb-fa); k=1; while(abs(c-b)>t) a=b; b=c; fa=a^3-3*a^2-a+9; fb=b^3-3*b^2-b+9; c=b-fb*(b-a)/(fb-fa); k=k+1; end

学生信息管理系统实验报告

(此文档为word格式,下载后您可任意编辑修改!) 面向对象程序设计大作业 ------学生信息管 理系统 学院名称信息科学与工程学院 专业班级数学大类2011级2班 学生姓名魏仿 学号 指导教师孙红梅

完成时间: 2013 年 5 月 29 日

学生信息管理系统 1、编程目的 为方便学生信息的管理,特编写这个程序方便操作学生信息管理系统。实现对学生姓名、学号、性别、成绩等信息的管理,可以实现学生的增加、删、查等多种功能的操作。 2、系统简介 本系统实现学生信息的管理,以动态链表、结构体数据类型来实现数据的存储与加工,利用链表来实现学生信息的插入、删除、查找功能。 主要分7个模块: 模块一: 结构体的定义,定义struct student{};struct date{};结构体struct student{};数据成员包括:int studentId; char name[20]; char sex[5]; struct date birthday; int score; struct student *next; 其中 struct date birthday;

又借用struct date{};结构体的成员:int year; int month; int day;以此来实现学生学号、姓名、性别、出生日期、成绩等信息的存储于处理。 模块二: ListCreate函数,函数类型为:struct student 形参:struct student *();主函数,测试数据,测试链表各节点(学生基本信息)的输出、插入、删除、查找功能。 3、编程思路 一:数据类型: 1.考虑到学生个人信息包含学号、姓名、性别、出生日期、成绩等信息。因此采用结构体类型,定义学生个人信息结构体,并定义学生学号、姓名、性别、出生日期、成绩等数据成员。 2.考虑到要实现多个学生个人信息的管理,可采用结构体数组与链表。但是由于要对多个学生信息进行信息的插入、删除、查找等操作。显然结构体数组很难实现以上操作,因此选用链表。

计算方法实验报告 拟合

南京信息工程大学实验(实习)报告 一、实验目的: 用最小二乘法将给定的十个点拟合成三次多项式。 二、实验步骤: 用matlab编制以函数为基的多项式最小二乘拟合程序,并用于对下列数据作三次多项式最小二乘拟合(取权函数wi=1) x -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 y -2.30 -1 -0.14 -0.25 0.61 1.03 1.75 2.75 4.42 6.94 给定直线方程为:y=1/4*x3+1/2*x2+x+1 三、实验结论: 最小二乘法:通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。 一般地。当测量数据的散布图无明显的规律时,习惯上取n次代数多项式。 程序运行结果为: a = 0.9731 1.1023 0.4862 0.2238 即拟合的三次方程为:y=0.9731+1.1023x+0.4862*x2+0.2238*x3

-2.5 -2-1.5-1-0.5 00.51 1.52 2.5 -4-20246 81012 x 轴 y 轴 拟合图 离散点 y=a(1)+a(2)*x+a(3)*x.2+a(4)*x.3 结论: 一般情况下,拟合函数使得所有的残差为零是不可能的。由图形可以看出最小二乘解决了残差的正负相互抵消的问题,使得拟合函数更加密合实验数据。 优点:曲线拟合是使拟合函数和一系列的离散点与观测值的偏差平方和达到最小。 缺点:由于计算方法简单,若要保证数据的精确度,需要大量的数据代入计算。

计算方法实验报告

实验报告 一、求方程f(x)=x^3-sinx-12x+1的全部根, ε=1e -6 1、 用一般迭代法; 2、 用牛顿迭代法; 并比较两种迭代的收敛速度。 一、首先,由题可求得:12cos 3)(2 ' --=x x x f . 其次,分析得到其根所在的区间。 ① 令()0=x f ,可得到x x x sin 1123 =+-. ② 用一阶导数分析得到1123 +-x x 和x sin 两个函数的增减区间;再用二阶导数分析得到 两个函数的拐点以及凹凸区间. ③ 在直角坐标轴上描摹出01123 =+-x x 和0sin =x 的图,在图上可以看到他们的交点,然后估计交点所在的区间,即是所要求的根的区间。经过估计,得到根所在的区间为 []3,4--,[]1,0和[]4,3. 1、 一般迭代法 (1)算法步骤: 设ε为给定的允许精度,迭代法的计算步骤为: ① 选定初值0x .由()0=x f 确定函数()x g ,得等价形式()x g x =. ② 计算()0x g .由迭代公式得()01x g x =. ③ 如果ε≤-01x x ,则迭代结束,取1x 为解的近似值;否则,用1x 代替0x ,重复步骤②和步骤③. (2)程序代码: ① 在区间[]3,4--内, 代码: clc

x0=-3.5; %初值0x iter_max=100; %迭代的最大次数 ep=1e-6; %允许精度 ε k=0; while k<=iter_max %k 从0开始到iter_max 循环 x1=(sin(x0)+12*x0-1).^(1/3); %代入0x ,算出1x 的值 if abs(x1-x0)

管理信息系统实验报告.

1 系统概述 1.1选题来源 大学生面对购买生活学习的物品,有网购、从商店超市购买等渠道。但其中弊端很多。大学生学生最深的体会就是,宿舍里放着很多已经对自己无用的物品,无论是在校大学生或是即将毕业的大学生都有很多二手货品留着没什么用,弃之可惜。如:课本书籍、自行车、座椅等。所以大学生很需要一个二手货交易平台。 1.2研究的目的和意义 目的:帮助需要销售二手货的同学快捷方便的找到买家,帮助需要购买物品的同学快捷准确的找到便宜实惠想要买的物品,节省生活开销。 意义:节省时间,不浪费物资,促使整个校园形成节约环保、互帮互助的好风气。 1.3系统的目标和管理需求 本系统需要设计客户端和管理端,其中客户端包括公共信息浏览、公共信息查询、个人信息管理、购物信息、前台订单处理(结账)。管理端包括用户管理、公告消息管理、商品管理、后台订单处理等。 大学生二手货交易平台系统目标是为了在校学生提供一个良好的交易平台。本系统基于Visual Basic和Microsoft SQL Server开发出来的,如今的电子商务网站也越来越多,此交易平台将传统的交易逐步引向网络中。

1.4系统开发的可行性 (1)管理的可行性 交易平台学校可以指派学生进行维护,而且由于只对学校的学生,老师开放的平台维护起来相对方便而且安全性也容易保证,例如学生可以用学号注册,由于用户特点比较统一各项管理措施可以比较有针对性。 (2)技术的可行性 大学生二手货交易平台主要通过Visual Basic编程技术对其进行开发和实现的。本系统所需要设计的功能难度不大,加上还有有指导老师和查找相关参考文献,所以在技术上是可以完成的。 (3)经济的可行性 广大大学生具有收入单一、消费多样化和消费观念开放等独特的生活忙时和消费心理,毕业生不可能将留存的东西带走,宿舍空间有限,大学生有很多无用物品无法处理,大学生对校内二手货物品需求量大等。使得二手货交易平台更受大学生欢迎 (4)用户使用可行性 所开发的软件系统是基于微型计算机图形界面的操作,所以会一般的计算机操作即可使用本系统。系统管理员要求有计算机的专业知识。对系统管理员将进行专业培训,使其能够对熟练管理本系统。

相关文档
相关文档 最新文档