计算机图形学实验报告

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

教育科学与技术学院

2016/2017学年第一学期

实验报告

实验课程名称计算机图形学

专业教育技术学

学生学号 B******** 学生姓名朱志耀

指导教师熊健、闫静杰

指导单位通信与信息工程学院

日期:2016年11月24日

1、每项实验报告的内容

============================================================================== 实验一:直线的生成算法实现

一、实验目的:

理解直线生成的原理;

二、实验内容:

1、了解直线的生成原理

2、掌握几种基本的直线生成算法:DDA画线法、中点画线法、Bresenham画线法。

3、仿照教材关于直线生成的Bresenham算法,编译程序。

4、调试、编译、运行程序。

三、实验方法及编程:

a)实现方法介绍本次实验是在Turbo C 2.0的平台上编译实现的;Bresenham算法

的基本原理是:过各行各列像素中心构造一组虚拟网格线,按直线从起点到终点的

顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。

b)实现代码及分析

#include "stdio.h"

#include "graphics.h"

Bresenham_line(x0,y0,x1,y1,color)

int x0,y0,x1,y1,color;

{

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

float k;

dx=x1-x0;

dy=y1-y0;

k=(dy*1.0)/dx; /*求斜率*/

e=2*dy-dx;

x=x0;

y=y0;

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

{

putpixel(x,y,RED);/*画红色的像素点*/

e=e+2*dy;

if(e>=0)

{

y++;

e=e-2*dx;

}

}

}

int main()

{

int x0,y0,x1,y1,c;

int graphdriver=DETECT,graphmode=0;

/*自动搜索显示器类型和显示模式*/

initgraph(&graphdriver,&graphmode,"c:\\TC20\\BGI");

/*初始化图形系统*/

setbkcolor(WHITE); /*设置背景为白色*/

setcolor(BLUE); /*设置直线为蓝色*/

Bresenham_line(100,100,500,500,3);

/*画以(100,100)为起点,(500,500)为终点,3为像素点的直线*/

getch();

/*从控制台读取一个字符,但不显示在屏幕上*/

closegraph(); /*关闭图形系统*/

}

四、实验结果及分析:

这幅图片是以Bresenham直线扫描算法绘制的以(100,100)为起点,(500,500)为终点的一条直线,背景被设置为了白色,以蓝色画出了这条直线。

实验二:自由曲线的生成算法实现

一、实验目的:

理解曲线生成的原理

二、实验内容:

1、了解自由曲线的生成原理。

2、掌握三次样条曲线和Bezier曲线的生成算法。

3、仿照教材关于自由曲线生成的Bezier算法,编译程序。

4、调试、编译、运行程序。

三、实验方法及编程:

a)实现方法介绍本次实验是在Turbo C 2.0的平台上编译实现的;用光滑参数曲线

段逼近折线多边形,只需要根据给出的数据点就可以构造出曲线,曲线次数严格依

赖于确定该段曲线的数据点个数,曲线形状依赖于多边形的形状,多边形的第一个

顶点和最后一个顶点在曲线上。

b)实现代码及分析

#include

#include

#include

#include

#include

#define N 1000

int n;//控制点的个数

struct point //控制点的坐标

{

double x;

double y;

}point[N];

void init() //输入控制点的坐标

{

int i;

printf("please input the number of the points: ");

scanf("%d",&n);

printf("please input the location of the points\n");

for(i=0;i

scanf("%lf %lf",&point[i].x,&point[i].y);

}

void sol1() //绘制控制多边形的轮廓

{

int i;

setcolor(RED);

for(i=0;i

line((int)point[i].x,(int)point[i].y,(int)point[i+1].x,(int)point[i

相关文档
最新文档