计算机图形学基础教程实验报告

  • 格式:doc
  • 大小:196.50 KB
  • 文档页数:18

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

民族学院信息工程学院实验报告

(数字媒体技术专业用)

班级:0312413 :谌敦斌学号:031241318 实验成绩:

实验时间:2013年10 月14 日9、10 节实验地点:数媒实验室课程名称:计算机图形学基础教程实验类型:设计型 实验题目:直线与圆的绘制

一、实验目的

通过本次实验,熟练掌握DDA、中点、Bresenham直线绘制方法和中点、Bresenham圆的画法,能够在vc环境下独立完成实验容,逐渐熟悉opengl的语法特点,提高程序基本绘图的能力。

二、实验环境(软件、硬件及条件)

Microsoft vc++6.0 多媒体计算机

三、实验容

1.从DDA、中点、Bresenham画线法中任选一种,完成直线的绘制。

2.从中点、Bresenham画圆法中任选一种,完成圆的绘制。

四、实验方法与步骤

打开vc++6.0,新建一个工程,再在工程里面建一个.cpp文件,编辑程序,编译连接后执行即可。

程序如下

bresenham画线法:

#include

#include

int bresenham(int x0,int y0,int x1,int y1,int color)

{

int x,y,dx,dy,e,i;

dx=x1-x0;

dy=y1-y0;

e=-dx;

y=y0;

for(x=x0;x<=x1;x++)

{

putpixel(x,y,color);

e+=2*dy;

if(e>=0) { y++;

e-=2*dx;

}

}

return 0;

}

int main()

{

initgraph(640,480);

bresenham(0,0,500,200,255);

while(!kbhit())

{

}

closegraph();

return 0;

}

Bresenham画圆法:

#include

#include

int circlepoints(int x,int y,int color)

{

putpixel(255+x,255+y,color);

putpixel(255+y,255+x,color);

putpixel(255-x,255+y,color);

putpixel(255+y,255-x,color);

putpixel(255-x,255-y,color);

putpixel(255-y,255-x,color);

putpixel(255+x,255-y,color);

putpixel(255-y,255+x,color);

return 0;

}

int bresenhamcircle(int r,int color) {

int x,y,d;

x=0;

y=r;

d=3-2*r;

while(x<=y)

{

circlepoints(x,y,color);

if(d<0)

d+=4*x+6;

else

{

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

y--;

}

x++;

}

return 0;

}

int main()

{

initgraph(640,480);

bresenhamcircle(100,255);

while(!kbhit())

{

}

closegraph();

return 0;

}

五、实验结果记录与分析

实验结果如下:

六、疑难问题报告

民族学院信息工程学院实验报告

(数字媒体技术专业用)

班级:0312413 :谌敦斌学号:031241318 实验成绩:

实验时间:2013年10 月29 日9、10 节实验地点:数媒实验室课程名称:计算机图形学基础教程实验类型:设计型 实验题目:多边形的填充算法和曲线的绘制

一、实验目的

通过本次实验,熟练掌握种子填充算法和多边形扫描线填充算法以及bezier曲线或者B样条曲线的基本绘制算法,能够独立在vc环境下实现任意多边形的填充和一般曲线的绘制,进一步熟悉opengl的语法结构和强大的绘图功能,增强多媒体底层程序绘图能力。

二、实验环境(软件、硬件及条件)

Microsoft vc++6.0 多媒体计算机

三、实验容

1.选择种子填充算法或者多边形的扫描线算法完成多边形的填充。

2.选择bezier曲线或者B样条曲线算法完成曲线的绘制。

四、实验方法与步骤

打开vc++6.0,新建一个工程,再在工程里面建一个.cpp文件,编辑

程序,编译连接后执行即可。

程序如下:

多边形扫描线填充算法:

//sweep.h

#ifndef SWEEP_H

#define SWEEP_H

struct Edge {

int nxty;

int curx;

int dx, dy;

Edge *nxt;

};

void sweep(int p[][2], int n, void (*setPixel)(int, int)); #endif

//sweepline.cpp

#include

#include

#include

#include "sweep.h"

void myInit();

void setPixel(int x, int y);

void myDisplay();

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

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowSize(640, 480);

glutInitWindowPosition (100, 150);

glutCreateWindow("SweepLine");

glutDisplayFunc(&myDisplay);

myInit();

glutMainLoop();

return 0;

}

void setPixel(int x, int y) {

glBegin(GL_POINTS);

glVertex2i(x, y);

glEnd();

}

void myInit() {

glClearColor(1.0, 1.0, 1.0, 0.0);