文档介绍:-
. z
计算机图形学
实验报告
姓 名: 云飞
学 反之
y=y+1,且d=d+UpIncre d=d+DownIncre
↓↓↑↑
↓
假设*<=*1 →→→↑
↓
完毕
程序代码
void CE*periment_Frame_OneView::DDA(int *0, int Y0, int *1, int Y1)
{
//----------请实现DDA算法------------//
int d*,dy,epsl,k;
float *,y,*Incre,yIncre;
d*=*1-*0; dy=Y1-*0;
*=*0; y=Y0;
if(abs(d*)>abs(dy)) epsl=abs(d*);
else epsl=abs(dy);
*Incre=(float)d*/(float)epsl;
yIncre=(float)dy/(float)epsl;
for(k=0;k<=epsl;k++){
DrawPi*el((int)(*+),(int)(y+));
*+=*Incre;
y+=yIncre;
}
}
void CE*periment_Frame_OneView::Mid_Bresenham(int *0, int Y0, int *1, int Y1)
{
//-------请实现Mid_Bresenham算法-------//
-
. z
int d*,dy,d,UpIncre,DownIncre,*,y,*end;
if(*0>*1){
*=*1;*1=*0;*0=*;
y=Y1;Y1=Y0;Y0=y;
}
*=*0;y=Y0;
d*=*1-*0;dy=Y1-Y0;
d=d*-2*dy;
UpIncre=2*d*-2*dy;
DownIncre=-2*dy;
while(*<*1){
DrawPi*el(*,y);
*++;
if(d<0){
y++;
d+=UpIncre;
}
else d+=DownIncre;
}
}
运行结果
运行结果分析
DDA算法根本上没有什么问题,Mid_Bresenham算法在网格尺寸比拟大时误差较大,通过改变网格尺寸大小即能较为准确地描绘出所绘直线。总之在误差允许的围类,实验结果令人满意。
思考题〔可选〕
如何测试比拟算法的性能.
提示1:因为绘制1条直线时间很短,所以需要绘制大量直线才能比拟它们之间的性能;
提示2: drawpi*el需要消耗时间,但它的时间性能和直线绘制算法无关,因此在比拟不同算法性能时,应该屏蔽它的影响,如何屏蔽.
实验心得
-
. z
通过此次实验,我对典型的直线绘制算法DDA算法、Bresenham中点算法有了进一步的了解与掌握。由于第一次做图形学的相关实验,陌生感还是有的,对平台也不太掌握,所以一开场很难入门,但在教师的帮助和同学的相互讨论下,结果还是可观的。两个根本算法都得以实现。希望随着学****的加深,后续的实验能够做的更好。
多边形扫描转换算法
1实验目的和要求
理解多边形扫描转换的原理;掌握典型多边形扫描转换算法;掌握步处理、分析实验数据的能力;
编程实现根本*-扫描线转换算法〔必做〕;
编程实现有效边表转换算法〔选做〕。
2实验环境和工具
本试验提供自带实验平台
开发环境:Visual C++
本实验提供名为 Polygon_Conversion的平台,该平台提供根本绘制、设置、输入功能,学生在此根底上实现*-扫描线算法和有效边表转换算法。
多边形输入:
用户按【功能】à【输入多边形……】菜单开场输入多边形;
单击鼠标左键输入多边形顶点;
点击鼠标右键完毕多边形输入,并将最后一个顶点和第一个顶点进展连接;
参数设置:
用户按“【功能】à【设置……】〞启动设置对话框
设置容:
-
.