- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西北农林科技大学实验报告
学院名称:理学院 专业年级:
课 程:计算机图形学 报告日期:2013年11月30日
十二周
1.实验目的:
(1)熟练掌握基本图形元素生成算法。
(2)对高级语言的图形模式的设定有比较详细的了解。
(3)对基本图形类(或函数)的调用方法有一个比较详细的了解。
2.实验要求:
该学生自己选定一种基本图形(直线段),编写生成该基本图形的源程序,并能在计算机上编译运行,画出正确的图形。
3.实验步骤:
(1)DDA算法、Bresenham算法进行比较,选定比较合适的算法。
(2)画出程序流程图;
(3)编写程序的源程序;
(4)编辑源程序并进行调试;
(5)进行特殊模式的运行测试,并结合情况进行调整。
(6)打印源程序或把源程序以文件的形式提交
4.实验内容:
(1)DDA算法、Bresenham算法进行比较,选定比较合适的算法。
选择Bresenham算法
理由:DDA算法是一个增量算法,直观、易实现,但是x,y,k必须用浮点数表示,且每一步运算都需对x,y进行舍入取整,使得它不利于硬件的实现。Bresenham算法则没有这个缺陷。
直线(在显示器上显示为线段):记两端点为P0(x0,y0),P1(x1,y1)
用函数表示F(x,y)=y-kx-b,k=(y1-y0)/(x1-x0);(先讨论0=k=1,此时x方向是最大 位移方向)
A.点与直线有三种关系:
F(x,y)=0,点在直线上; F(x,y)0,点在直线上方; F(x,y)0,点在直线下方;
x(i+1)=xi+1
判别式:d(xm,ym)=F(xi+1,yi+0.5)=0.5-k
递推:1.d0 取pu(xi+1,yi+1),d(i+1)=F(x+2,y+1.5)=d+1-k
2.d=0 取pd(xi+1,yi) ,d(i+m)=F(xi+2,yi+0.5)=d-k
算法步骤:(0=k=1)(k1)
1、输入直线段端点坐标P0(x0,y0),P1(x1,y1)
2、计算初始值
*x=x1-x0,*y=y1-y2,d=0.5-k(d=1-0.5k),x=x0,y=y0;
3.绘制(x,y)
4.判断d的大小,若d0,x,y更新为(x+1 ,y+1)(x,y+1),d更新为d+1-k(d+1);若 d=0, x,y更新为(x+1 ,y)(x+1,y+1),d更新为d-k ( d+1-k)
5.直线未画完重复3,4,否则结束。
(2)画出程序流程图;
5 实验源程序:
function bresen()
x0=input(请输入始点坐标的横坐标x0);
y0=input(请输入始点坐标的纵坐标y0);
x1=input(请输入终点点坐标的横坐标x1);
y1=input(请输入终点坐标的纵坐标y1);
dx=x1-x0;
dy=y1-y0;
x=x0;
y=y0;
if (dy/dx=0 dy/dx=1)
e=-dx;
while(x=x1)
plot(x,y,.,markersize,1)
hold all
x=x+1;e=e+2*dy;
if(e0)
y=y+1;
e=e-2*dx;
end
end
end
if (dy/dx1)
e=-dy;
while(y=y1)
plot(x,y,.,markersize,1)
hold all
e=e+2*dx;
y=y+1;
if(e=0)
x=x+1;
e=e-2*dx;
else
e=e-2*dx;
end
end
end
xlim([0 800]);
ylim([0 800]);
grid
示例(0,0)-(5,8)
(0,0)-(400,500)
第 1 页 共 4 页
文档评论(0)