计算机图形学实验一.pdf
西北农林科技大学实验报告
实验一基本图形元素生成算法
1.实验目的:
1)熟练掌握基本图形元素生成算法。
2)对高级语言的图形模式的设定有比较详细的了解。
3)对基本图形类(或函数)的调用方法有一个比较详细的了解。
2.实验内容:
该学生自己选定一种基本图形(直线段),编写生成该基本图形
的源程序,并能在计算机上编译运行,画出正确的图形。
3.实验步骤:
1)对DDA算法、Bresenham算法进行比较如下:
Bresenham算法是计算机图形学领域使用最广泛的直线扫描转换方法。
原理:过各行、各列像素中心构造一组虚拟网格线,按直线从起
点到终点的顺序计算直线各垂直网格线的交点,然后确定该列像素中
与此交点最近的像素。此算法的优点在于可以采用增量计算,使得对
于每一列,只要检查一个误差项的符号,就可以确定该列所求的像素。
特点:
1,不必计算直线之斜率,因此不做除法;
2,不用浮点数,只用整数;
3,只做整数加减法和乘2运算,而乘2运算可以用硬件移位实现.
Bresenham算法速度很快,并适于用硬件实现.
DDA算法是计算机图形学中一种基于直线的微分方程来生成直线的方法,由
于有浮点数运算与取整,该算法不利于硬件实现。
特点:
1.浮点数运算
2.不易硬件实现
相比较之下,选用Bresenham算法。
2)画出程序流程图;
程序流程图如下:
start
输入x0,y0,x1,y1
x0x1
将x0与x1交换
y0与y1交换
x=x1
计算初值,x=x0,y=y0;dx=x1-x0,
dy=y1-y0,d=dx-2*dy,UpIncre=2*dx-2*dy;
DownIncre=-2*dy
绘制(x,y)点,
x+1
d0
y+1,d=d+UpIncre
end
3)编写程序的源程序;
程序如下:
functionMidBresenhamline(x0,y0,x1,y1)
ifx0x1
x=x1;x1=x0;x0=x;
y=y1;y1=y0;y0=y;
end
x=x0;y=y0;
dx=x1-x0;dy=y1-y0;
d=dx-2*dy;
UpIncre=2*dx-2*dy;
DownIncre=-2*dy;
whilex=x1
axis([x0x1y0y1])
plot([x],[y],*);
gridon
holdon
x=x+1;
ifd0
y=y+1;
d=d+UpIncre;
else
d=d+DownIncre;
end
pause(0.1);
end
t=x0:1:x1
yy=(y1-y0)./(x1-x0)*t+(y1-((y1-y0)./(x1-x0)*x1));
plot(t,yy)