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

南昌大学- -计算机图形学实验报告

南昌大学- -计算机图形学实验报告
南昌大学- -计算机图形学实验报告

南昌大学实验报告

计算机图形学实验

学生姓名:

学号: 6100

专业班级:计科112班

教学老师:徐老师

目录

一、实验一直线和圆 (1)

二、实验二填充算法 (5)

三、实验三裁剪算法 (7)

四、实验四曲线的绘制(Bezier) (11)

五、实验五曲线的绘制(B样条) (14)

南昌大学实验报告一学生姓名:学号:6100 专业班级:计科112 班

实验类型:□验证■综合□设计□创新实验日期:实验成绩:一.实验名称

直线和圆

二.实验目的

1、掌握中点画圆算法

2、熟悉曲线的整数加减来计算沿圆周的像素位置

三.实验内容

1、使用中点画圆算法,熟悉算法的内容和原理。

2、通过改变参数值设定背景色和圆的大小

四.实验结果

如图2-1.画直线算法

如图2-2.中点画圆算法

五.程序源码:

//Line.cpp

#include

void init(void)

{

glClearColor(1.0,1.0,1.0,0.0) ;

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,200.0,0.0,150.

0);

}

void lineSegment(void)

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0,0.0,0.0);

glBegin(GL_LINES);

glVertex2i(180,15);

glVertex2i(10,145);

glEnd();

glFlush();

}

void main(int argc,char**argv) {

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SING LE|GLUT_RGB);

glutInitWindowPosition(50,100 );

glutInitWindowSize(400,300);

glutCreateWindow("Line");

init();

glutDisplayFunc(lineSegment);

glutMainLoop();

}

`#include void init(void) {

glClearColor(1.0,1.0,1.0,0.0);

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,200.0,0.0,150.

0);

}

class screenPt

{

private:

GLint x,y;

public:

screenPt(){

x=y=0;

}

void setCoords(GLint xCoordValue,GLint yCoordValue){

x=xCoordValue;

y=yCoordValue;

}

GLint getx()const{

return x;

}

GLint gety()const{

return y;

}

void incrementx(){

x++;

}

void decrementy(){

y--;

}

};

void setPixel(GLint xCoord,GLint yCoord)

{

glBegin(GL_POINTS);

glVertex2i(xCoord,yCoord);

glEnd();

}

void circleMidpoint(GLint xc,GLint yc,GLint radius)

{

screenPt circPt;

GLint p=1-radius;

circPt.setCoords(0,radius);

void

circlePlotPoints(GLint,GLint,scr eenPt);

circlePlotPoints(xc,yc,circPt );

while(circPt.getx()

circPt.incrementx();

if(p<0)

p+=2*circPt.getx()+1;

else{

circPt.decrementy();

p+=2*(circPt.getx()-circPt.ge ty())+1;

}

circlePlotPoints(xc,yc,circPt );

}

}

void circlePlotPoints(GLint xc,GLint yc,screenPt circPt)

{

setPixel(xc+circPt.getx(),yc+ circPt.gety());

setPixel(xc-circPt.getx(),yc+ circPt.gety());

setPixel(xc+circPt.getx(),yc-circPt.gety());

setPixel(xc-circPt.getx(),yc-circPt.gety());

setPixel(xc+circPt.gety(),yc+ circPt.getx());

setPixel(xc-circPt.gety(),yc+ circPt.getx());

setPixel(xc+circPt.gety(),yc-circPt.getx());

setPixel(xc-circPt.gety(),yc-circPt.getx());

}

void display(void)

{

screenPt a;

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0,0.0,0.0);

//glViewport(0,0,500,500);

circleMidpoint(90,90,50);

circlePlotPoints(8,8,a);

glFlush();

}

void main(int argc,char**argv) {

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SING LE|GLUT_RGB);

glutInitWindowPosition(50,100 ); glutInitWindowSize(400,300);

glutCreateWindow("Circle"); init();

glutDisplayFunc(display);

glutMainLoop();

}

南昌大学实验报告二学生姓名:学号:6100 专业班级:计科112 班

实验类型:□验证■综合□设计□创新实验日期:实验成绩:一.实验名称:

区域填充

二.实验目的

1、掌握种子填充算法。

三.实验内容

1、熟悉和掌握种子填充算法。

四.实验结果

如图3-1.区域填充

五.程序源码:

#include

#include

#include

#include

void init(void)

{

glClearColor(1.0,1.0,1.0,0.0);

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,300.0,0.0,300.0);/ /初始化投影窗口,保持与显示的窗口一致}

void setPixel(int x,int y,long fillColor)//定义setPixel函数

{

glColor3f(fillColor<<16,fillColor <<8,fillColor);

glBegin(GL_POINTS);

glVertex2i(x,y);

glEnd();

}

void boundaryFill4(int x,int y,long fillColor,long borderColor)//递归的边界填充算法

{

unsigned char params[3];

long interiorColor;

glReadPixels(x,y,1,1,GL_RGB,GL_UN SIGNED_BYTE,params);

interiorColor=RGB(params[0],param s[1],params[2]);//内部颜色获取

if(interiorColor!=borderColor&&in teriorColor!=fillColor)//递归

{

setPixel(x,y,fillColor);

boundaryFill4(x+1,y,fillColor,bor derColor);//

boundaryFill4(x-1,y,fillColor,bor derColor);//左

boundaryFill4(x,y+1,fillColor,bor derColor);//上

boundaryFill4(x,y-1,fillColor,bor derColor);//下

}

}

void lineSegment(void)

{

long borderColor=RGB(255,0,0);//定义边界颜色

long fillColor=RGB(0,0,255);//定义填充颜色

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(255,0,0);

glBegin(GL_LINE_LOOP);//画填充的六边形

glVertex2i(0,40);

glVertex2i(20,0);

glVertex2i(60,0);

glVertex2i(80,40);

glVertex2i(60,80);

glVertex2i(20,80);

glEnd();

boundaryFill4(60,60,fillColor,bor derColor);//调用递归函数

glFlush();

}

void main(int argc,char** argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|G LUT_RGB);

glutInitWindowPosition(150,100);

glutInitWindowSize(300,300);

glutCreateWindow("种子填充");

init();

glutDisplayFunc(lineSegment);

glutMainLoop();

}

南昌大学实验报告三学生姓名:学号:610 专业班级:计科112 班

实验类型:□验证■综合□设计□创新实验日期:实验成绩:一.实验名称:

裁剪算法

二.实验目的

1、掌握梁友栋算法。

2、提高程序编写能力。

三.实验内容

1、掌握梁友栋算法

2、学会编写程序

四.实验结果

如图1.梁友栋-Barsky线段裁剪五.程序源码

#include

#include

#include

#include

class wcPt2D

{

public:

GLfloat x,y;

void setCoords(GLfloat xCoord,GLfloat

yCoord){x=xCoord;y=yCoord;}

GLfloat getx() const{return x;}

GLfloat gety() const{return y;} };

inline GLint round(const GLfloat a){return GLint(a+0.5);}

void setPixel(int x,int y)

{

glBegin(GL_POINTS);

glVertex2i(x,y);

glEnd();

}

void init()

{

glClearColor(1.0,1.0,1.0,0.0);

glMatrixMode (GL_PROJECTION);

gluOrtho2D(-200.0,200.0,-200.0,20 0.0);

}

void lineBres(GLfloat x0,GLfloat y0,GLfloat xEnd,GLfloat yEnd)

{

int dx = fabs(xEnd - x0),dy = fabs(yEnd - y0);

int p = 2*dy - dx;

int twoDy = 2*dy,twoDyMinusDx = 2*(dy - dx);

int x,y;

if(x0>xEnd){

x = xEnd;

y = yEnd;

xEnd = x0;

}

else{

x = x0;

y = y0;

}

setPixel(x,y);

while(x

x++;

if(p<0)

p+=twoDy;

else{

y++;

p+=twoDyMinusDx;

}

setPixel(x,y);

}

}

GLint clipTest(GLfloat p,GLfloat q,GLfloat *u1,GLfloat *u2)

{

GLfloat r;

GLint Value = true;

if(p<0.0){

r = q/p;

if(r>*u2)

Value = false;

else

if(r>*u1)

*u1 = r;

}

else

if(p>0.0){

r = q/p;

if(r<*u1)

Value = false;

else if(r<*u2)

*u2 = r;

}

else

if(q<0.0)

Value = false;

return(Value);

}

void lineClipLiangBarsk(wcPt2D winMin,wcPt2D winMax,wcPt2D p1,wcPt2D p2)

{

GLfloat u1 = 0.0,u2 = 1.0,dx = p2.getx()-p1.getx(),dy;

GLfloat x1 = p1.getx(),y1 = p1.gety();

GLfloat x2 = p2.getx(),y2 = p2.gety();

if(clipTest(-dx,p1.getx()-winMin. getx(),&u1,&u2))

if(clipTest(dx,winMax.getx()-p1.g etx(),&u1,&u2)){

dy = p2.gety()-p1.gety();

if(clipTest(-dy,p1.gety()-winMin. gety(),&u1,&u2)){

if(clipTest(dy,winMax.gety()-p1.g ety(),&u1,&u2)){

if(u2<1.0){

p2.setCoords(p1.getx()+u2*dx,p1.g ety()+u2*dy);

}

if(u1>0.0){

p1.setCoords(p1.getx()+u1*dx,p1.g ety()+u1*dy);

}

glColor3f(0.0,1.0,0.0);//裁剪了的线的颜色。

lineBres(x1,y1,p1.getx(),p1.gety( ));

lineBres(p2.getx(),p2.gety(),x2,y 2);

glColor3f(1.0,0.0,0.0);//在窗口里的裁剪后的线的颜色

lineBres(p1.getx(),p1.gety(),p2.g etx(),p2.gety());

}

}

else{

glColor3f(0.0,0.0,1.0);//在窗口外的直线的颜色。

lineBres(x1,y1,x2,y2);

}

}

}

void lineSegment()

{

glClear(GL_COLOR_BUFFER_BIT);

glLineWidth(3.0);

glColor3f(0.1,0.2,0.1);

glBegin(GL_LINE_LOOP);

glVertex2i(100,100);

glVertex2i(100,-100);

glVertex2i(-100,-100);

glVertex2i(-100,100);

glEnd();

glPointSize(4);

wcPt2D test1[4] = {{-100.0,-100.0},{100.0,100.0},{-150. 0,-200.0},{200.0,120.0}};

wcPt2D test2[4] = {{-100.0,-100.0},{100.0,100.0},{-150. 0,-120.0},{0.0,0.0}};

wcPt2D test3[4] = {{-100.0,-100.0},{100.0,100.0},{-50.0 ,50.0},{150.0,150.0}};

wcPt2D test4[4] = {{-100.0,-100.0},{100.0,100.0},{-50.0 ,0.0},{60.0,50.0}};

wcPt2D test5[4] = {{-100.0,-100.0},{100.0,100.0},{-170. 0,-200.0},{200.0,-120.0}};

lineClipLiangBarsk(test1[0],test1 [1],test1[2],test1[3]);

lineClipLiangBarsk(test2[0],test2 [1],test2[2],test2[3]);

lineClipLiangBarsk(test3[0],test3 [1],test3[2],test3[3]);

lineClipLiangBarsk(test4[0],test4 [1],test4[2],test4[3]);

lineClipLiangBarsk(test5[0],test5 [1],test5[2],test5[3]);

glFlush();

}

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

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowPosition(100,100);

glutInitWindowSize(400,400);

glutCreateWindow("chenbazhu");

init();

glutDisplayFunc(lineSegment);

glutMainLoop();

return 0;

}

南昌大学实验报告四

学生姓名:学号:6100 专业班级:计科112 班

实验类型:□验证■综合□设计□创新实验日期:实验成绩:一.实验名称:

曲线的绘制

二.实验目的

1、掌握Bezier曲线的定义生成算法;

三. 实验内容

假设窗口的宽高分别是600 , 600 个像素单位,定义的裁剪窗口由函数

gluOrtho2D(-50.0,50.0,-50.0,50.0)决定。

曲线控制点数据:

1、已知空间四点P0(-40.0,-40.0,0.0)、P1(-10.0,200.0,0.0)、P2(10.0,-200.0,0.0)、P3(40.0,40.0,0.0),根据Bezier曲线的定义编程绘制曲线。

四.实验结果

如图5-1Bezier曲线

五.实验心得

这个实验考查的是曲线的绘制,要求熟练掌握好Bezier曲线的原理和编程。通过这个实验,我不仅深入了解了曲线绘制的算法,还熟练了OpenGL编程。

六.程序源码

//Bezier.cpp

#include

#include

#include

#include

GLsizei winWidth = 400,winHeight = 400; GLfloat xwcMin = -50.0,xwcMax = 50.0; GLfloat ywcMin = -50.0,ywcMax = 50.0;

class wcPt3D

{

public:

GLfloat x,y,z;

};

void init(void)

{

glClearColor(1.0,1.0,1.0,0.0);

}

void plotPoint(wcPt3D bezCurvePt)

{

glBegin(GL_POINTS);

glVertex2f(bezCurvePt.x,bezCurvePt.y);

glEnd();

}

void binomialCoeffs(GLint n,GLint *C) {

GLint k,j;

for(k=0;k<=n;k++){

C[k]=1;

for(j=n;j>=k+1;j--)

C[k]*=j;

for(j=n-k;j>=2;j--)

C[k]/=j;

}

}

void computeBezPt(GLfloat u,wcPt3D *bezPt,GLint nCtrlPts,wcPt3D *ctrlPts,GLint *C)

{

GLint k,n = nCtrlPts - 1;

GLfloat bezBlendFcn;

bezPt->x = bezPt->y = bezPt->z = 0.0;

for(k=0;k

bezBlendFcn = C[k]*pow(u,k)*pow(1-u,n-k);

bezPt->x+=ctrlPts[k].x*bezBlendFcn;

bezPt->y+=ctrlPts[k].y*bezBlendFcn;

bezPt->z+=ctrlPts[k].z*bezBlendFcn;

}

}

void bezier(wcPt3D *ctrlPts,GLint nCtrlPts,GLint nBezCurvePts)

{

wcPt3D bezCurvePt;

GLfloat u;

GLint *C,k;

C = new GLint[nCtrlPts];

binomialCoeffs(nCtrlPts-1,C);

for(k=0;k<=nBezCurvePts;k++){

u = GLfloat(k) / GLfloat(nBezCurvePts);

computeBezPt(u,&bezCurvePt,nCtrlPts,ctr lPts,C);

plotPoint(bezCurvePt);

}

delete[] C;

}

void displayFuc(void)

{

GLint nCtrlPts = 4,nBezCurvePts = 1000;

wcPt3D ctrlPts1[4] = {{-40,-40.0,0.0},{-10.0,200.0,0.0},{10.0,-2 00.0,0.0},{40.0,40.0,0.0}};

glClear(GL_COLOR_BUFFER_BIT);

glPointSize(4);

glColor3f(1.0,0.0,0.0);

bezier(ctrlPts1,nCtrlPts,nBezCurvePts);

glFlush();

}

void winReshapeFuc(GLint newWidth,GLint newHeight)

{

glViewport(0,0,newWidth,newHeight);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(xwcMin,xwcMax,ywcMin,ywcMax) ;

glClear(GL_COLOR_BUFFER_BIT);

}

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

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowPosition(100,100);

glutInitWindowSize(winWidth,winHeight);

glutCreateWindow("Bezier 曲线");

init();

glutDisplayFunc(displayFuc);

glutReshapeFunc(winReshapeFuc);

glutMainLoop();

return 0;

}

南昌大学实验报告五

学生姓名:学号:专业班级:计科112 班

实验类型:□验证■综合□设计□创新实验日期:实验成绩:一.实验名称:

曲线的绘制

二.实验目的

1、掌握B样条曲线的定义生成算法。

三. 实验内容

假设窗口的宽高分别是600 , 600 个像素单位,定义的裁剪窗口由函数

gluOrtho2D(-50.0,50.0,-50.0,50.0)决定。

曲线控制点数据:

1、已知空间四点P0(-40.0,-40.0,0.0)、P1(-10.0,200.0,0.0)、P2(10.0,-200.0,0.0)、P3(40.0,40.0,0.0),根据B样条曲线的定义绘制曲线。

五.实验结果

如图三次B样条曲线

六.实验心得

这个实验考查的是曲线的绘制,要求我们应该对B样条曲线的原理和编程有一定的认识及作用。通过这个实验,我不仅深入了解了曲线绘制的算法,还熟练了OpenGL编程。七.程序源码

//Bspline.cpp

#include

#include

#include

#include

GLsizei winWidth = 600, winHeight = 600; GLfloat xwcMin = -50, xwcMax = 50;

GLfloat ywcMin = -50, ywcMax = 50;

//GLfloat u[11] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0};

GLfloat u[8] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 };

class wcPt3D

{

public:

GLfloat x, y, z;

};

void init()

{

glClearColor(1.0, 1.0, 1.0, 0.0);

}

void plotPoint(wcPt3D bCurvePt) {

glBegin(GL_POINTS);

glVertex2f(bCurvePt.x,bCurvePt.y);

glEnd();

}

GLfloat Bsum(GLfloat n,GLint k,GLint d)

{

if (d == 1)

if (n >= u[k] && n < u[k + 1]){

return 1.0;

}

else return 0.0;

else{

GLfloat i = Bsum(n, k, d - 1);

GLfloat j = Bsum(n, k + 1, d - 1);

GLfloat x, y;

if (u[k + d - 1] - u[k] != 0)

x = (n - u[k]) / (u[k + d - 1] - u[k]);

else

x = 0.0;

if (u[k + d] - u[k + 1] != 0)

y = (u[k + d] - n) / (u[k + d] - u[k + 1]);

else

y = 0.0;

return (x*i + y*j);

}

}

void computeBPt(wcPt3D* bPt, wcPt3D* ctrlPts, GLfloat n, GLint d, GLint nCtrlPts)

{

bPt->x = bPt->y = bPt->z = 0.0;

GLfloat Bkd;

GLint i;

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

Bkd = Bsum(n, i, d);

bPt->x += Bkd*ctrlPts[i].x;

bPt->y += Bkd*ctrlPts[i].y;

bPt->z += Bkd*ctrlPts[i].z;

}

}

void Bline(wcPt3D* ctrlPts, GLint nCtrlPts, GLint nBCurvePts, GLint d)

{

wcPt3D bCurvePt;

GLfloat n;

GLint i;

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

n = (GLfloat(i) * 9.0) / GLfloat(nBCurvePts);

//n = (GLfloat(i) * 7.0) / GLfloat(nBCurvePts);

computeBPt(&bCurvePt, ctrlPts, n, d, nCtrlPts);

plotPoint(bCurvePt);

}

}

void displayFcn()

{

GLint i;

GLint nCtrlPts = 4, nBCurvePts = 1000, d = 4;

//GLint nCtrlPts = 7, nBCurvePts = 1000, d = 4;

//wcPt3D ctrlPts[7] = { { 0.0, -40.0, 0.0 }, { -35.0, 20.0, 0.0 }, { -15.0, 30.0, 0.0 }, //{ 0.0, 25.0, 0.0 }, { 15.0, 30.0, 0.0 }, { 35.0, 20.0, 0.0 }, { 0.0, -40.0, 0.0 } };

wcPt3D ctrlPts[4] = { { -40.0, -40.0, 0.0 }, { -10.0, 50.0, 0.0 }, { 10.0, -50.0, 0.0 }, { 40.0, 40.0, 0.0 } };

glClear(GL_COLOR_BUFFER_BIT);

glPointSize(4);

glColor3f(1.0, 0.0, 0.0);

Bline(ctrlPts, nCtrlPts, nBCurvePts, d);

glPointSize(10);

glColor3f(0.0, 0.0, 0.0);

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

plotPoint(ctrlPts[i]);

}

glFlush();

}

void winReshapeFcn(GLint newWidth, GLint newHeight)

{

glViewport(0, 0, newWidth, newHeight);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(xwcMin, xwcMax, ywcMin, ywcMax);

glClear(GL_COLOR_BUFFER_BIT);

}

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

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowPosition(50, 50);

glutInitWindowSize(winWidth, winHeight);

glutCreateWindow("B 样条曲线");

init();

glutDisplayFunc(displayFcn);

glutReshapeFunc(winReshapeFcn);

glutMainLoop();

return 0;

}

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号: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; }

研究生计算机图形学课程室内场景OpenGL--实验报告Word版

《高级计算机图形学》实验报告 姓名:学号:班级: 【实验报告要求】 实验名称:高级计算机图形学室内场景 实验目的:掌握使用OpenGL生成真实感复杂对象的方法,进一步熟练掌握构造实体几何表示法、扫描表示法、八叉树法、BSP树法等建模方法。 实验要求:要求利用OpenGL生成一个真实感的复杂对象及其周围场景,并显示观测点变化时的几何变换,要具备在一个纹理复杂的场景中漫游功能。要求使用到光线跟踪算法、 纹理映射技术以及实时绘制技术。 一、实验效果图 图1:正面效果图

图2:背面效果图 图4:背面效果图

图4:室内场景细节效果图 图5:场景角度转换效果图

二、源文件数据代码: 共6个文件,其实现代码如下: 1、DlgAbout.cpp #include "StdAfx.h" #include "DlgAbout.h" CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() 2、FormCommandView.cpp #include "stdafx.h" #include "Tool.h" #include "MainFrm.h" #include "FormCommandView.h" #include "ToolDoc.h" #include "RenderView.h" // Download by https://www.wendangku.net/doc/685891581.html, #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CFormCommandView IMPLEMENT_DYNCREATE(CFormCommandView, CFormView) CFormCommandView::CFormCommandView() : CFormView(CFormCommandView::IDD) { //{{AFX_DATA_INIT(CFormCommandView)

江苏大学 计算机图形学第三次实验报告 二维图形变换

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

成绩评定表

二维图形变换 1. 实验内容 完成对北极星图案的缩放、平移、旋转、对称等二维变换。 首先要建好图示的北极星图案的数据模型(顶点表、边表)。另外,可重复调用“清屏”和“暂停”等函数,使整个变换过程具有动态效果。 2. 实验环境 操作系统:Windows XP 开发工具:visual studio 2008 3. 问题分析 为了建立北极星图形,首先在二维空间中根据坐标绘制出北极星图形。并且在此坐标系中确定好走笔顺序以便于进行连线操作。 同时需要好好的使用清屏函数以使得显示正常。 1. 放大缩小变换 放大缩小变换公式为:x’=x.a, y’=y.d; 其中a,d分别为x,y方向的放缩比例系数。 可通过不同的比例系数来显示程序运行结果。当a=d时为等比例放缩操作。可令变换矩阵为T。 2. 对称变换 包括以x轴对称、y轴对称和原点O对称三种。由于屏幕坐标只有第一象限,我们可以将原点平移到(500,240)处。在第一象限画出一个三角形,然后分别求出三个对称图形。 3. 旋转变换 将图形上的点(x,y)旋转θ角度,得到新的坐标(x’,y’)为: x’=xcosθ-ysinθ, y’=xsinθ+ycosθ;

旋转矩阵T为4.平移变换 4. 算法设计 5. 源代码

//北极星 void hzbjx(CDC* pDC,long x[18],long y[18]) { CPen newPen1,*oldPen; newPen1.CreatePen(PS_SOLID,2,RGB(255,0,0)); oldPen = pDC->SelectObject(&newPen1); POINT vertex1[11]={{x[1],y[1]},{x[2],y[2]},{x[3],y[3]},{x[4],y[4]},{x[5],y[5]},{x[3],y[3]},{x[1],y[1]},{ x[6],y[6]},{x[3],y[3]},{x[7],y[7]},{x[5],y[5]}}; pDC->Polyline(vertex1, 11); newPen1.DeleteObject(); newPen1.CreatePen(PS_SOLID, 2, RGB(0,255,0)); oldPen = pDC->SelectObject(&newPen1); POINT vertex2[5]={{x[6],y[6]},{x[8],y[8]},{x[9],y[9]},{x[3],y[3]},{x[8],y[8]}}; pDC->Polyline(vertex2, 5); POINT vertex3[5]={{x[4],y[4]},{x[10],y[10]},{x[11],y[11]},{x[3],y[3]},{x[10],y[10]}}; pDC->Polyline(vertex3, 5); newPen1.DeleteObject(); newPen1.CreatePen(PS_SOLID, 2, RGB(255,0,90)); oldPen = pDC->SelectObject(&newPen1); POINT vertex4[11]={{x[12],y[12]},{x[13],y[13]},{x[3],y[3]},{x[9],y[9]},{x[14],y[14]},{x[15],y[15]},{x[ 3],y[3]},{x[11],y[11]},{x[12],y[12]},{x[3],y[3]},{x[14],y[14]}}; pDC->Polyline(vertex4, 11); newPen1.DeleteObject(); newPen1.CreatePen(PS_SOLID, 2, RGB(0,100,255)); oldPen = pDC->SelectObject(&newPen1); POINT vertex5[5]={{x[15],y[15]},{x[16],y[16]},{x[3],y[3]},{x[16],y[16]},{x[7],y[7]}}; pDC->Polyline(vertex5, 5); POINT vertex6[5]={{x[2],y[2]},{x[17],y[17]},{x[3],y[3]},{x[17],y[17]},{x[13],y[13]}};

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

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

计算机图形学发展综述 一、计算机图形学历史 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曲线、曲面的理论,成功地用于几何外形设计,并开发了用于汽车外形设计的

计算机图形学实验报告 (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))

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

一、设计内容与要求 1.1、设计题目 算法实现时钟运动 1.2、总体目标和要求 (1)目标:以图形学算法为目标,深入研究。继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面作出评价和改进意见。通过完成一个完整程序,经历策划、设计、开发、测试、总结和验收各阶段,达到巩固和实践计算机图形学课程中的理论和算法;学习表现计算机图形学算法的技巧;培养认真学习、积极探索的精神。 (2)总体要求:策划、设计并实现一个能够充分表现图形学算法的演示系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。(3)开发环境:Viusal C++ 6.0 1.3、设计要求 内容: (1)掌握动画基本原理; (2)实现平面几何变换; 功能要求: (1)显示时钟三个时针,实现三根时针间的相互关系;

(2)通过右键菜单切换时钟背景与时针颜色; 1.4设计方案 通过使用OpenGL提供的标准库函数,综合图形学Bresenham画线和画圆的算法,OpenGL颜色模型中颜色表示模式等实现指针式时钟运动,并通过点击右键菜单实习时钟背景与时针颜色的转换。根据Bresenham画线和画圆的算法,画出时钟的指针和表盘。再根据OpenGL颜色模型定义当前颜色。设置当时钟运行时交换的菜单,运行程序时可变换时钟背景与时针的颜色。最后再设置一个恢复菜单恢复开始时表盘与指针的颜色。

二、总体设计 2.1、过程流程图

2.2、椭圆的中点生成算法 1、椭圆对称性质原理: (1)圆是满足x轴对称的,这样只需要计算原来的1/2点的位置;(2)圆是满足y轴对称的,这样只需要计算原来的1/2点的位置; 通过上面分析可以得到实际上我们计算椭圆生成时候,只需要计算1/4个椭圆就可以实现对于所有点的生成了。 2、中点椭圆算法内容: (1)输入椭圆的两个半径r1和r2,并且输入椭圆的圆心。设置初始点(x0,y0)的位置为(0,r2); (2)计算区域1中央决策参数的初始值 p = ry*ry - rx*rx*ry + 1/4*(rx*rx); (3)在区域1中的每个Xn为止,从n = 0 开始,直到|K|(斜率)小于-1时后结束; <1>如果p < 0 ,绘制下一个点(x+1,y),并且计算 p = p + r2*r2*(3+2*x); <2>如果P >=0 ,绘制下一个点(x+1,y-1),并且计算 p = p + r2*r2*(3+2*point.x) - 2*r1*r1*(y-1) (4)设置新的参数初始值; p = ry*ry(X0+1/2)*(X0+1/2) + rx*rx*(Y0-1) - rx*rx*ry*ry; (5)在区域2中的每个Yn为止,从n = 0开始,直到y = 0时结束。 <1>如果P>0的情况下,下一个目标点为(x,y-1),并且计算 p = p - 2rx*rx*(Yn+1) + rx*rx;

江苏大学物理实验考试题库和答案完整版

大学物理实验A(II)考试复习题 1.有一个角游标尺,主尺的分度值是°,主尺上29个分度与游标上30个分度等弧长,则这个角游标尺的最小分度值是多少? 30和29格差1格,所以相当于把这1格分成30份。这1格为°=30′,分成30份,每份1′。 2.电表量程为:0~75mA 的电流表,0~15V 的电压表,它们皆为级,面板刻度均为150小格,每格代表多少?测量时记录有效数字位数应到小数点后第几位(分别以mA 、V 为记录单位)?为什么? 电流表一格小数点后一位 因为误差, 电压表一格小数点后两位,因为误差,估读一位 ***3.用示波器来测量一正弦信号的电压和频率,当“Y轴衰减旋钮”放在“2V/div”档,“时基扫描旋钮”放在“div”档时,测得波形在垂直方向“峰-峰”值之间的间隔为格,横向一个周期的间隔为格,试求该正弦信号的有效电压和频率的值。 f=1/T=1÷×= U 有效=÷根号2= ***4.一只电流表的量程为10mA ,准确度等级为级;另一只电流表量程为15mA ,准确度等级为级。现要测量9mA 左右的电流,请分析选用哪只电流表较好。 量程为10mA ,准确度等级为级的电流表最大误差,量程为15mA ,准确度等级为级,最大误差,所以选用量程为15mA ,准确度等级为级 5. 测定不规则固体密度 时,,其中为0℃时水的密度,为被测物在空气中的称量质量,为被测物完全浸没于水中的称量质量,若被测物完全浸没于水中时表面附 有气泡,试分析实验结果 将偏大还是偏小?写出分析过程。 若被测物浸没在水中时附有气泡,则物体排开水的体积变大,物体所受到的浮力变大,则在水中称重结果将偏小,即m 比标准值稍小,可知0ρρm M M -=将偏小 6.放大法是一种基本的实验测量方法。试写出常用的四种放大法,并任意选择其中的两种方法,结合你所做过的大学物理实验,各举一例加以说明。 累计放大法 劈尖干涉测金属丝直径的实验中,为了测出相邻干涉条纹的间距 l ,不是仅对某一条纹测量,而是测量若干个条纹的总间距 Lnl ,这样可减少实验的误差。 机械放大法 螺旋测微器,迈克尔孙干涉仪读数系统

计算机图形学实验报告

目录

实验一直线的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(); }

计算机图形学实验报告记录

计算机图形学实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

计算机图形学实验报告 姓名:___ __________ 学号:_____ ________ 班级:______ _______ 时间:_____2016年12月_________

实验一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) {

工商管理学院实验报告

实验报告 课程名称: 人力资源管理__ 课程代码: 101207709 __ 学院(直属系): 工商管理学院_ 年级/专业/班: 2013级工商管理6班 学生姓名: 张启___ 学号: 312013073456 实验总成绩: _____________________ 任课教师: 曹嘉晖______ 开课学院: 工商管理学院_ 实验中心名称: 工商管理学院实验中心

西华大学实验报告 开课学院及实验室:工商管理学院实验中心实验时间:2015年11月2-13日 本实验的主要目的是培养学生综合应用人力资源管理理论和实际操作的能力。 二、实验要求 ①通过计算机软件对人力资源管理各种实务的模拟,增强学生对人力资源管理的感性认识,使学生所学的理论知识转化为动手能力。②综合应用本课程的知识或相关课程知识,使学生全面、系统地体会人力资源管理的全部内容和涵义。③给定实验目的、要求和实验条件,由学生自行设计实验方案并加以实现,以激发学生的主动性、创造性。 三、使用设备、仪器及材料 计算机、计算机网络、打印机及相关软件等 四、实验过程记录 1、在AC单项实验中我们需要招聘大客户经理,进行销售行为访谈,根据对大客户经理岗位的要求,选出3-4个比较适合该案例企业所招聘岗位考察的维度。运用行为时间访谈法(BEI)比较合适的考察了上述维度,选出了几个比较适合该行为事件访谈法考察的维度,对各个指标进行权重分配,根据所招聘岗位的各个考察指标设置符合STAR原则部分要求的面试题目。最终招聘到了合适的大客户经理。 2、在综合性训练计划报告中,对TT公司进行案例分析。解决了其薪酬体系的问题,以及其实行的岗位工作制度的原因及优点等问题,分析了其实行绩效工资的薪酬体系的好处。 3、在战略和制度试验中,对LX公司进行分析,分析了该公司的绩效考核与公司战略的结合,以及是否适合推行保卫+进攻的双拳战略等问题。分析了其中的影响因素以及系统构成、战略调整、制度构建等方面的问题。

计算机图形学报告

中南大学 计算机图形学 实验报告 学生姓名谭淼 学号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、实验中遇到的问题及处理方法

西华大学数据库实验报告(五)

第5次作业 ——事务、游标、自定义函数 一、环境 运行SQL Server,并已经创建名为student数据库、“学生信息”表、“课程”表、“学生成绩”表。 二、实训内容 1、事务 (1)Alice和Bob分别有银行账号A、B,分别用表a、表b表示,这2个表都只有1个字段amount,表示余额。现在需要从Alice向Bob转账制定金额,要求转账过程中不能出现错误,而且不管转账是否成功,都扣除Alice账号1元钱的手续费。 (2)amount字段上的约束条件是余额不能小于0 declare@xmoney money,@err1int,@err2int set@xmoney= 300 --指定转账金额为300 begin transaction update A set amount=amount- 1 --扣除手续费 set@err1=@err1+@@ERROR--记录上述update可能出现的错误 save transaction transfer--设置保存点transfer update A set amount=amount-@xmoney--从账号A中扣除金额 set@err2=@err2+@@ERROR--记录上述update可能出错的情况 update B set amount=amount+@xmoney--想账号B中转入金额 set@err2=@err2+@@error if@err1!= 0 --如果扣除手续费出现错误 begin rollback transaction print'所有操作失败' end else begin

if@err2!= 0 --如果转账过程出现错误 begin rollback transaction transfer--回滚到保存点transfer处 print'转账失败,但手续费已扣' end else begin commit transaction--所有操作成功,提交事务 print'转账成功' end end go 2、自定义函数 (1)在student数据库中,创建标量函数,统计“课程”表中总共有多少 条门课程,写出程序代码。要求:在建立函数之前,为排除重名函数,先判断要创建的函数是否存在,如果存在则先删除。 if exists(select name from sysobjects where name='Ccount'and type='FN') drop function https://www.wendangku.net/doc/685891581.html,ount go create function https://www.wendangku.net/doc/685891581.html,ount() returns int as begin declare@num int set@num= 0 select@num=count(*) from学生课程_蒲强林 return@num end go -- 调用函数查询 use student go declare@num int set@num= 0 set@num=https://www.wendangku.net/doc/685891581.html,ount() print'课程表中总共有:'+cast(@num as char(1))+'门课程' go 运行结果截图:

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号: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;

计算机图形学课程设计报告简单图形的绘制-

《计算机图形学》课程设计 报告 学生姓名:学号: 学院: 班级: 题目: 简单图形的绘制 职称2015年7月1日

目录 目录............................................................................................... I 一、选题背景 (1) 二、算法设计 (2) 2.1 绘制直线、圆、椭圆、抛物线 (2) 2.1.1 绘制直线 (2) 2.1.2 绘制圆 (2) 2.1.3 绘制椭圆 (2) 2.1.4 绘制抛物线 (2) 2.2 三维几何变换 (2) 三、程序及功能说明 (5) 3.1 绘制直线、圆、椭圆、抛物线...... (5) 3.1.1 绘制直线 (5) 3.1.2 绘制圆 (5) 3.1.3 绘制椭圆 (5) 3.1.4 绘制抛物线 (6) 3.2 图形的平移 (6) 3.3 图形的旋转 (6) 3.4 图形的缩放 (7) 四、结果分析 (7) 4.1 绘制直线、圆、椭圆、抛物线 (7) 4.1.1 直线 (7) 4.1.2 圆 (8)

4.1.3 椭圆 (8) 4.1.4 抛物线 (8) 4.2 图形的平移 (9) 4.3 图形的旋转 (10) 4.4 图形的缩放 (11) 五、总结 (10) 六、课程设计心得体会 (14) 参考文献 (15) 源程序 (16)

一、选题背景

二、算法设计 2.1 绘制直线、圆、椭圆、抛物线 2.1.1 绘制直线 通过两个点的坐标来绘制直线。计算机图形学中二维图形在显示输出之前需要扫描转换,生成直线的算法一般有DDA 算法和中点算法。 2.1.2 绘制圆 通过运用圆的参数方程cos ;sin x a r y b r θθ=+=+来绘制圆的图形,其中[0,2]θπ∈, (a,b )为圆心,r 为半径,运用参数方程,只需要确定半径的长度和圆心的位置,即可绘制出圆。 2.1.3 绘制椭圆 通过运用椭圆的参数方程cos ;sin x a y b θθ==来绘制椭圆的图形,其中 [0,2]θπ∈,是已知的变量,a ,b 分别为长半轴,短半轴,当确定a 和b 后,通过参数方程即可得到这个椭圆的方程。 2.1.4 绘制抛物线 根据点绘制抛物线图像是通过拟合完成,根据三个点的坐标,通过数据拟合,得到经过这三个点的函数关系式,从而再根据这个函数关系式绘制出抛物线上其他的点,形成一条连续的抛物线;或直接根据已知函数绘制图像是通过已知函数画出图像。 2.2 三维几何变换 三维几何变换是二维几何变换的推广。二维几何变换在齐次坐标空间中 可用3?3的变换矩阵表示,类似的,三维几何变换在齐次坐标空间中可用4?4的变换矩阵表示。三维空间中的点(),,x y z 的齐次坐标定义为(),,h h h x y z ,其中,h 为不等与零的任意常数,h x hx =,h y hy =,h z hz =。亦即点(),,x y z 对应4维齐次坐标空间的一条直线:

西华大学CAD上机实验报告

西华大学上机实验报告(二) 一、实验目的 掌握直线、多边形、圆、圆弧、椭圆、圆环、多段线等绘图命令的操作与运用。 二、实验内容或设计思想 1)用上节课所学的绘图命令,绘制下列图形,形似即可,但要求圆和六边形的中心坐标为(0.5L,1/3B),半圆的中心坐标在矩形的长边中心处。(其中L为矩形的长,B为矩形的宽)。 2)绘制下列图形,不需标注,尺寸、角度必须精确。

三、实验环境与工具 计算机、AUTOCAD软件。 四、实验过程或实验数据 1)打开AUTOcad软件; 2)2-1 命令: _rectang 指定第一个角点或[倒角(C)/标高(E)/圆角(F)/厚度(T)/宽度(W)]: 指定另一个角点或[面积(A)/尺寸(D)/旋转(R)]: 命令: _explode 找到 1 个 命令: _divide 选择要定数等分的对象: 输入线段数目或[块(B)]: 3 命令: _circle 指定圆的圆心或[三点(3P)/两点(2P)/相切、相切、半径(T)]: 指定圆的半径或[直径(D)]: 命令:CIRCLE 指定圆的圆心或[三点(3P)/两点(2P)/相切、相切、半径(T)]: 指定圆的半径或[直径(D)] <12.2851>: 命令: _trim 当前设置:投影=UCS,边=无 选择剪切边... 找到11 个 选择要修剪的对象,或按住Shift 键选择要延伸的对象,或 [栏选(F)/窗交(C)/投影(P)/边(E)/删除(R)/放弃(U)]:

2-2-1 命令: _line 指定第一点: 指定下一点或[放弃(U)]: 命令: _line 指定第一点: 指定下一点或[放弃(U)]: @80<141.5 命令: xl XLINE 指定点或[水平(H)/垂直(V)/角度(A)/二等分(B)/偏移(O)]: a 输入构造线的角度(0) 或[参照(R)]: 54.5 指定通过点: 命令: _trim 当前设置:投影=UCS,边=无 选择剪切边... 找到 3 个 选择要修剪的对象,或按住Shift 键选择要延伸的对象,或 [栏选(F)/窗交(C)/投影(P)/边(E)/删除(R)/放弃(U)]: 2-2-2 命令: _circle 指定圆的圆心或[三点(3P)/两点(2P)/相切、相切、半径(T)]: 指定圆的半径或[直径(D)] <20.0000>: 30 命令: _polygon 输入边的数目<4>: 指定正多边形的中心点或[边(E)]: 输入选项[内接于圆(I)/外切于圆(C)] : 指定圆的半径: 30 命令: _circle 指定圆的圆心或[三点(3P)/两点(2P)/相切、相切、半径(T)]: 指定圆的半径或[直径(D)] <30.0000>: 20 命令: _circle 指定圆的圆心或[三点(3P)/两点(2P)/相切、相切、半径(T)]: 指定圆的半径或[直径(D)] <20.0000>: 5 命令:CIRCLE 指定圆的圆心或[三点(3P)/两点(2P)/相切、相切、半径(T)]: 指定圆的半径或[直径(D)] <5.0000>: 命令:CIRCLE 指定圆的圆心或[三点(3P)/两点(2P)/相切、相切、半径(T)]: 指定圆的半径或[直径(D)] <5.0000>: 命令:CIRCLE 指定圆的圆心或[三点(3P)/两点(2P)/相切、相切、半径(T)]: 指定圆的半径或[直径(D)] <5.0000>:

计算机图形学课程设计书

计算机图形学课程设计 书 文档编制序号:[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日 摘要 图像融合是图像处理中重要部分,能够协同利用同一场景的多种传感器图像信息,输出一幅更适合于人类视觉感知或计算机进一步处理与分析的融合图像。它可明显的改善单一传感器的不足,提高结果图像的清晰度及信息包含量,有利于更为准确、更为可靠、更为全面地获取目标或场景的信息。图像融合主要应用于军事国防上、遥感方面、医学图像处理、机器人、安全和监控、生物监测等领域。用于较多也较成熟的是红外和可见光的融合,在一副图像上显示多种信息,突出目标。一般情况下,图像融合由

相关文档