计算机图形学 直线段生成绘制的实现算法94730.docVIP

计算机图形学 直线段生成绘制的实现算法94730.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验 一、实验目的和要求: 1、了解Visual C++等编程环境中常用控件命令与绘图函数,初步掌握在试验设计集成下进行图形处理程序的设计方法。 2、熟练掌握直线的3中扫描转换算法:DDA算法,中点算法和Bresenham算法。 二、实验内容: 1、编程实现DDA算法、Bresenham算法、中点递归算法绘制直线段。 2、分析对比三种算法的像素逼近效果和程序执行速度 。 3、输出要求:每种算法要分别在八个二分之一象限内画一条直线段。 三、 像素逼近效果由好到差依次为:Bresenham算法、DDA算法、中点算法。执行速度由快到慢依次为:中点算法、DDA算法、Bresenham算法。 3、中点算法和Bresenham算法都隐含着对逼近过程中误差项的处理,这样就使得直线生成更准确。 四、、 #include graphics.h #include conio.h // 四舍五入 int Round(float x) { return (int)(x 0 ? x - 0.5 : x + 0.5); } // 使用 DDA 算法画任意斜率的直线(包括起始点,不包括终止点) void Line_DDA(int x1, int y1, int x2, int y2, int color) { float x, y; // 当前坐标点 float cx, cy; // x、y 方向上的增量 int steps = abs(x2 - x1) abs(y2 - y1) ? abs(x2 - x1) : abs(y2 - y1); x = (float)x1; y = (float)y1; cx = (float)(x2 - x1) / steps; cy = (float)(y2 - y1) / steps; for(int i = 0; i steps; i++) { putpixel(Round(x), Round(y), color); // 在坐标 (x, y) 处画一个 color 颜色的点 x += cx; y += cy; } } // 主函数 void main() { initgraph(640, 480); // 测试画线 Line_DDA(100, 1, 1, 478, GREEN); Line_DDA(1, 478, 638, 1, GREEN); // 按任意键退出 getch(); closegraph(); } 输出结果为: 2、#include graphics.h #include conio.h // 使用中点算法画任意斜率的直线(包括起始点,不包括终止点) void Line_Midpoint(int x1, int y1, int x2, int y2, int color) { int x = x1, y = y1; int a = y1 - y2, b = x2 - x1; int cx = (b = 0 ? 1 : (b = -b, -1)); int cy = (a = 0 ? 1 : (a = -a, -1)); putpixel(x, y, color); int d, d1, d2; if (-a = b) // 斜率绝对值 = 1 { d = 2 * a + b; d1 = 2 * a; d2 = 2 * (a + b); while(x != x2) { if (d 0) y += cy, d += d2; else d += d1; x += cx; putpixel(x, y, color); } } else // 斜率绝对值 1 { d = 2 * b + a; d1 = 2 * b; d2 = 2 * (a + b); while(y != y2) { if(d 0) d += d1; else x += cx, d += d2; y += cy; putpixel(x, y, color); } } } // 主函数 void main() { initgraph(640, 480); // 测试画线 Line_Midpoint(100, 1, 1, 478, GREEN); Line_Midpoint(1, 478, 638, 1, GREEN); // 按任意键退出 getch(); closegraph(); } 输出结果为: 3、Bresenham算法画任

文档评论(0)

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

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

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档