计算机图形学实验报告

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

计算机图形学

实验报告

*名:***

学号:********

班级:计算机科学与技术11-2班实验地点:逸夫楼507

实验时间:2014.03

实验1直线的生成

1实验目的和要求

理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析

实验数据的能力;

编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的

直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记

录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编

制成表格,并绘制折线图比较两种算法的性能。

2实验环境和工具

开发环境:Visual C++ 6.0

实验平台:Experiment_Frame_One(自制平台)。

本实验提供名为 Experiment_Frame_One的平台,该平台提供基本

绘制、设置、输入功能,学生在此基础上实现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;

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

↓______..______↓

坐标差dx=x1-x0;dy=y1-y0;

判断值d=dx-2*dy;

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

填充点(x,y),且x=x+1;

______↓______←←←

↓↓↑

若d<0 反之

y=y+1,且d=d+UpIncre d=d+DownIncre

↓______.______↓↑↑

若x<=x1 →→→↑

结束

3.2程序代码

void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1)

{

//----------请实现DDA算法------------//

int dx,dy,epsl,k;

float x,y,xIncre,yIncre;

dx=X1-X0; dy=Y1-X0;

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

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

x+=xIncre;

y+=yIncre;

}

}

void CExperiment_Frame_OneView::Mid_Bresenham(int X0, int Y0, int X1, int Y1)

{

//-------请实现Mid_Bresenham算法-------//

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

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

DrawPixel(x,y);

x++;

if(d<0){

y++;

d+=UpIncre;

}

else d+=DownIncre;

}

}

3.3运行结果

相关文档
最新文档