直线的生成算法-同济大学海洋与地球科学学院.docVIP

直线的生成算法-同济大学海洋与地球科学学院.doc

  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文档。上传文档
查看更多
直线的生成算法-同济大学海洋与地球科学学院

             地学绘图技术的计算机优化教学 中期成果材料 (二) 实验案例 项目负责人:赵永辉 所在单位:海洋与地球科学学院 2007年7月 课程性质:非独立设课 课程学时:22学时 实验教材或指导书名称: 自定 面向专业:地球物理学、地质学、地球信息科学技术(二年级本科生) 实验室名称:海洋楼210机房 《地学绘图技术的计算机优化教学》材料之二 实验案例 实验案例一 实验序号: 08-1 实验组数及人数:30组/1人 实验名称:直线的生成算法 实验内容: 从键盘输入:直线两个端点的坐标、颜色,编程实现直线的绘制 一、实习要求 将几何上的直线显示在光栅显示器的显示平面上是本次实习的任务。 实习中,首先我们应构造直线的参数作为已知条件在题目中给出: 直线参数为直线的两个端点的坐标:p1(x1,y1)、p2(x2,y2);端点的输入要求学生通过人机交互实现,要求学生在用网格或方格模拟屏幕象素来完成,生成方法可选用DDA算法或中点Bresenham法均可。 图形显示的任务就是要找出最佳逼近几何图形的那些象素的坐标值,并将这些象素置成所要求的颜色,这个过程就叫做图形的扫描转换。扫描转换的基本要求:图形准确、象素均匀、显示速度快。 二、编程提示 若用VC编写程序中需要用到VC画点函数: 画点函数 void far putpixel(int x, int y, int color); 该函数表示有指定的象元画一个按color 所确定颜色的点。对于颜色color的值可从表3中获得而对x, y是指图形象元的坐标。在图形模式下,是按象元来定义坐标的。对VGA适配器,它的最高分辨率为1024x768,其中1024为整个屏幕从左到右所有象元的个数,768 为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0,0),右下角坐标为(1023,767),水平方向从左到右为x 轴正向,垂直方向从上到下为y轴正向。关于点的另外一个函数是: int far getpixel(int x, int y);它获得当前点(x, y)的颜色值。 若用VB编写程序中需要用到VB画点函数: 单个像素的控制,是简单的图形操作。PSet 方法用来设置指定点处像素的色彩: [object.]PSet (x, y)[, color] 设置 50, 75 点为亮蓝色PSet (50, 75), RGB(0, 0, 255) 也可用绘制填充的园来模拟画点,格式如下: [object.]Circle [Step](x, y), radius[, color] 同时将改变系统的填充模式、填充颜色属性:fillmode, fillcolor. 三、补充内容 3.1 直线DDA算法思想   该算法实现的关键是:如何步进。它涉及到以下两点:   1、步进的方向。即步进的正或负,决定能否正确的到达终点。   2、步进的大小。即哪个方向的步进取单位步进?它控制了变化最大的步进,令其为单位步进,而另一个方向的步进必小于1 ,这样不论斜率|m|≤1否,都会使直线的亮度均匀。   依公式: 则下一点坐标为: 3.2直线DDA算法步骤   1、从主调函数得到参数:x1、y1、x2、y2、color;   2、分别计算出两个方向的变化量:dx=x2-x1,dy=y2-y1;   3、根据|dx|和|dy| 的大小,令steps=max(|dx|,|dy|);     计算两个方向的步进值:xin=dx/steps、yin=dy/steps;   4、设初值象素坐标:x=x1、y=y1;   5、点亮初始象素点 putpixel(x,y,color);   6、令循环初值为1;循环终值为最大步数steps;循环步距为1:     6.1、计算象素坐标 x=x+xin、y=y+yin;     6.2、点亮象素点 putpixel(x,y,color);   上述算法步骤3很关键,xin、yin的符号和大小分别决定了直线显示的准确及均匀。实习中编制两段函数,一段main()函数,另一段是dda()函数,从main()函数里得到参数,并将参数传入dda()函数。main()函数形式如下: #include graphics.h #include math.h main() {  //硬件测试,将gd装入图形驱动器,gm置入最大图形模式。  int gd=DETECT,gm,x1,y1,x2,y2,color;  printf(input x1,y1,x2,y2,color is:);  //输入直线参数。  scanf(%d%d%d%d%d,x1,y1,x2,y2,color);  //图形初始化。  initgraph(gd,gm,c:\\tc);  //设置兰背景。

文档评论(0)

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

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

1亿VIP精品文档

相关文档