DDA算法

1.直线方程:笛卡尔斜率截距方程 y=mx+b。
通过转换得到对于任何沿直线给定的x增量δx,对应的y增量δy
δy=m
δx(1.1)
同样,可以得出对应于指定的δy的x增量δx
Δx=δy/m(1.2)
对于具有斜率绝对值|m|<1的直线,可以设置一个较小的水平偏转电压δx,对应的垂直偏转电压可以通过(1.1)来定;而对于斜率值|m|>1的直线,则设置一个较小的垂直偏转电压δy,对应的水平偏转电压则由(1.2)计算出来的δx来设定;对于斜率m=1的直线,δx=δy,因为水平偏转和垂直偏转电压相等。在每一种情况下,都可以在指定的断电间生成一条斜率为m的光滑直线段。
解释:当|m|<1的时候,δy<δx,此时δy的较小,误差较大。所以通过提供δx来求δy,同理当|m|>1的时候,δx<δy,此时δx较小,误差较大。

2.DDA算法:线段扫描转换算法,基于(1.1)(1.2)来计算δx或δy。在一个坐标轴上以单位间隔对线段取样,从而确定另一个坐标轴上靠近先路径的对应整数值。
(1)假如斜率的绝对值小于等于1,并且起始点在左侧,则以单位x间隔(δx=1)取样,并逐个计算每一个y值
yk+1=yk+m。
下标k取整数值,从第一个点1开始递增知道最后的断电。由于m可以是0与1之间的任意实数,所以计算出的y值必须取整
(2)对于具有大于1的正斜率线段,则交换x和y的位置。也就是以点位y间隔(δy=1)取样,顺序计算每个x值
Xk+1=Xk+1/m;
此时,每一个计算出的x值要沿y扫描线舍人到最近的像素位置
(3)处理方向相反,即起始端点在右侧,那么δx=-1,并且
yk+1=yk+m。
(4)当斜率大于1的时候,起始端点在右边
Xk+1=Xk+1/m;

算法可以概括为一下的过程:输入线段两个端点的像素位置。端点位置间水平和垂直的差值赋给参数dx和dy。绝对值大的参数确定参数steps的值。该值也是在即将画出的这条线段上的像素数目;按照这个数值,沿线段路径计算每一步的下一个像素位置。先绘制位置(x0,y0)的像素,然后调整每一步的x和y,获得并逐一绘制余下的像素。假如dx的绝对值大于dy的绝对值,且x0小于xEnd,那么x和y方向的增量值分别为1和m。加入x方向的比较大,单x0大于xEnd ,那么就采用减量-1和-m来生成线段上的每个点。在其他情况下,y方向使用单位增量(或减量),x方向使用1/m的增量(或减量)。

参考资料《计算机图形学第四版》

DDA算法--计算机图形学相关推荐

  1. 计算机图形学椭圆_椭圆算法| 计算机图形学

    计算机图形学椭圆 椭圆的性质 (Properties of ellipse) Ellipse is defined as the locus of a point in a plane which m ...

  2. 七巧板复原算法——计算机图形学基本算法之一, 点在多边形内部的判断

    注:此时我已经完成了一个演示版本,但是为了文章的渐进性,我将把开发过程一步步的写出来,用来记录. 本实验代码用到的图形学关系和算法列举如下: 基本计算机图形学关系和算法 1.点在多边形内部的 点在多边 ...

  3. 种子填充算法----计算机图形学

    种子填充算法: 种子填充算法的基本思想是:从多边形区域的一个内点开始,由内向外用给定的颜色画点直到边界为止. 区域 可以由内部点或边界来定义,一般都采用边界定义,即区域边界上所有像素被置为特定值,而区 ...

  4. 七巧板复原算法——计算机图形学基本算法之二,线段相交判断

    判断线段相交,朴素的方法(初中直线方程的判断方法),就是先计算两条直线的交点,然后再判断交点是否在其中一条的线段上.这也是笔者能唯一想到的方法,后来抱着试试看有没有更好方法的想法,搜了一下网络.哦, ...

  5. 有序边表算法----计算机图形学

    有序边表算法: 有序边表算法的基本思想是:用水平扫描线从上到下(或从下到上)扫描由多条首尾相连的线段构成的多边形,每根扫描线与多边形的某些边产生一系列交点.将这些交点按照x坐标排序,将排序后的点两两成 ...

  6. 边标志填充算法----计算机图形学

    边标志填充算法: 基本原理:考虑每一条水平扫描线与每一条多边形边的交点,将该扫描线上交点右边的所有像素求补.对多边形的每条边作此处理,顺序随意. 本算法的特点:  优点:简单易行:  缺点:对于复杂图 ...

  7. 中点画圆算法----计算机图形学

    圆的对称特性: 一个八分圆上的点可以映射为其余七个八分圆的点 利用圆的对称性可以减少计算量,只需要计算出一个八分之一圆上需要画的点,就可以映射出整个圆 中点画圆算法: (对于原点为(xc,yc)的圆, ...

  8. Marching Cubes算法 - 计算机图形学

    本文章描述了一种三维标量场等值面的多边形曲面的创建方法.对于这类问题的一个通常的名字叫做"marching cubes"算法.这种算法即简单又高速,因为它基本上完全在查找表(loo ...

  9. 计算机图形学01:直线生成算法(DDA算法)

    作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...

  10. 计算机图形学05:中点BH算法对任意斜率的直线扫描转换方法

    作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...

最新文章

  1. Apache httpd 以root身份运行
  2. 丹佛斯变频器型号说明_英威腾变频器Goodrive20系列产品型号说明及功能介绍
  3. Groovy学习()面向Java开发者的Groovy
  4. mysql的limit性能优化
  5. SQL SERVER触发器使用实例
  6. CO模块之利润中心会计
  7. boost::log模块实现如何同时对多个文件执行日志记录的测试程序
  8. Android隐藏状态栏、导航栏
  9. oracle long转为string,实现全局拦截前端传入的Long类型id转String
  10. optimize table 需要多久_吉林市政工程资质新办需要多久
  11. LeetCode 486. 预测赢家(博弈DP)
  12. 高频面试题1:自增边量
  13. 有两个集合,两个集合都是10万个数据(已排序),判断B是不是A的子集,算法时间复杂度为Q(N)...
  14. 前端会有什么新的变化
  15. H5实例教学--ThreeJs 实现粒子动画飘花效果
  16. Java基础篇:循环语句之while语句
  17. android 缓存程序,Android轻量缓存框架--ASimpleCache
  18. J2EE运动会管理系统(含源码)
  19. 卸载已有的navicat for mysql,安装破解版navicat for mysql
  20. Windows安全加固

热门文章

  1. 详细了解 clientWidth、clientHeight、clientLeft、clientTop 以及几个常用的场景
  2. css实现数字钟表字体实现 fonts
  3. 第3章 数据库操作SQL语言---数据库原理及应用
  4. Modbus转Profibus网关将ACS530变频器接入Profibus总线案例
  5. 2018年中国互联网企业百强榜单揭晓
  6. 未解决:关于下载的ipython notebook打开的时候遇到问题的解决方法: NotJSONError(“Notebook does not appear to be JSON
  7. MTK驱动移植相关路径
  8. 教育未来JAVA培训中心笔记(一):初学者如何学好JAVA
  9. 便携式CAN分析仪、CAN接口卡、USBCAN 如何安装驱动?
  10. 新建mfc工程后打开图形化设计界面