计算机图形第一次上机实验报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机图形学上机实验报告 实验名称:用DDA算法生成直线 姓名:彭江军 班级:信息与计算科学 学号:2011114093 一:DDA算法的思想精髓 实现直线段光栅化的最简单的方法就是解直线的微分方程。设直线的起点坐标为 (xs, ys),终点坐标为 (xe, ye),那么该直线的微分方程是: 其离散解为: 或: 这里 (xi , yi) 是直线上一点的坐标值。式(3.2.1)和(3.2.2)表示所求直线 y 值和 x 值关于相应增量的逐次递归关系,递归初值为直线的起点。 DDA (Digital Differential Analyzer) 算法即数字微分分析算法就是基于式(3.2.1)或(3.2.2)对直线进行光栅化的算法。在一个坐标轴上以单位间隔对直线采样,以决定另一个坐标轴上最靠近直线的对应整数值。 (1)当直线斜率 0 ≤ m ≤ 1 时,则按单位 x 间隔(Dx = 1)取样并计算每个连续的 y 值: (2)当 -1≤ m ≤ 0 时,则仍按单位 x 间隔(Dx =-1)取样并计算每个连续的 y 值: (3)当 m 1 时,则将 x 和 y 交换,这就是说,按单位 y 间隔(Dy = 1) 取样并计算每个连续的 x 值: (4)当 m - 1 时,则同样交换 x 和 y 交换,并按 Dy =- 1间隔取样计算每个连续的 x 值: 应用上面的算式,解可以设计斜率为任意值的直线。 二:程序代码: #includestdio.h #includegraphics.h #includemath.h void lineDDA(int xs,int ys,int xe,int ye,int c) { int i; float x=xs,y=ys; float xIncrement ,yIncrement,steps,dx=xe-xs,dy=ye-ys; steps=abs(dx); if(abs(dy)abs(dx)) steps=abs(dy); xIncrement=dx/steps; yIncrement=dy/steps; putpixel(x,y,c); for(i=1;i=steps;i++) { x+=xIncrement; y+=yIncrement; putpixel(x,y,c); } } main() { int gdriver=DETECT; int gmode; initgraph(gdriver,gmode,); setbkcolor(MAGENTA); lineDDA(10,14,20,50,1); getch(); closegraph(); } 三:程序截图如下:  四:试验心得体会: DDA算法生成直线是非常快的,但是有一点需要注意的,就是x,y的数值类型。因为xIncrement和yIncrement并不都是整数,所以在实际编程中不能照抄课本23页的算法,否者由于精度损失,得到了就是一条和坐标轴平行的直线。 由于画图要调用BGI库中的EGAVGA.BGI文件,来驱动程序,因此要保证程序可以访问到该文件,针对有些同学程序正确但不出来图形,可能原因就在于程序没能用该驱动使initgraph函数正常初始化。

文档评论(0)

ebitjij + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档