布雷森汉姆氏(bresenham’s)和dda直线绘制算法(dda line drawing algorithm)的区别

在计算机图形学中,我们需要使用离散像素表示连续图形对象。这个过程称为扫描转换。每个图形系统都必须将线、圆和椭圆等图元转换为像素集合。...

在计算机图形学中,我们需要使用离散像素表示连续图形对象。这个过程称为扫描转换。每个图形系统都必须将线、圆和椭圆等图元转换为像素集合。

线条绘制算法用于在离散图形介质中绘制线条。计算机图形学中有三种线描算法。

  1. DDA算法(数字微分分析仪)
  2. 中点算法
  3. Bresenham线算法

bresenham线绘制算法

Bresenham的线算法是乐观的&增量扫描转换线绘制算法,计算起点和终点之间的所有中间点,完全使用整数和整数算法实现。它只使用加法和减法,避免了乘法和除法等繁重的运算。

Bresenham线绘制算法确定应选择的n维光栅的点,以便形成两点之间直线的近似。

它通常用于在位图图像(例如在计算机屏幕上)中绘制线基元,因为它仅使用整数加法、减法和位移位,所有这些都是常用计算机指令集(如x86_64)中非常廉价的操作。它是一种增量错误算法。它是计算机图形学领域最早开发的算法之一。原始算法的扩展可用于绘制圆。

bresenham算法

步骤1:启动算法

步骤2:声明变量x1、x2、y1、y2、d、i1、i2、dx、dy

步骤3:输入x1、y1、x2、y2的值,其中x1、y1为起点坐标,x2、y2为终点坐标

步骤4:计算dx=x2-x1计算dy=y2-y1计算i1=2*dy计算i2=2*(dy-dx)计算d=i1-dx

步骤5:考虑(x,y)作为起点,XENDA是x的最大可能值;如果dx>0,则x=x1,y=y1,xend=x2

步骤6:在(x,y)坐标处生成一个点。

步骤7:检查是否生成整行。如果x>=停下来。

步骤8:如果d<如果d为0,则d=d+i1≥ 0,则d=d+i2增量y=y+1

第9步:增量x=x+1

步骤10:绘制最新(x,y)坐标点

步骤11:转到步骤7

步骤12:算法结束

dda直线绘制算法

DDA代表数字微分分析仪。这是一种增量线算法,每一步的计算都基于前面步骤的结果。DDA算法沿一个坐标采取单位步长,并沿另一个坐标计算相应的值。

DDA用于线、三角形和多边形的光栅化。它们可以扩展到非线性函数,如透视校正纹理映射、二次曲线和遍历体素。

线性DDA从计算dy或dx中较小的一个开始,另一个的单位增量。然后在一个坐标中以单位间隔对线进行采样,并为另一个坐标确定最接近线路径的相应整数值。

dda算法

步骤1:启动算法

第二步:将x1、y1、x2、y2、dx、dy、x、y声明为整数变量。

步骤3:输入x1、y1、x2和y2的值。

步骤4:计算dx=x2-x1

步骤5:计算dy=y2-y1

步骤6:如果ABS(dx)>ABS(dy)则步骤=ABS(dx)否则

步骤7:xinc=dx/步骤yinc=dy/步骤分配x=x1分配y=y1

步骤8:设置像素(x,y)

步骤9:x=x+xinc y=y+yinc设置像素(圆(x),圆(y))

步骤10:重复步骤9,直到x=x2

步骤11:结束算法

Also Read: Difference Between Deterministic And Non-deterministic Algorithms

dda(dda) vs. bresenham算法(bresenham’s algorithm)

比较基础DDA算法BRESENHAM算法
描述DDA代表数字微分分析仪。——-
操作DDA算法在其运算中使用乘法和除法。Bresenham的算法在运算中只使用减法和加法。
功能DDA算法不如Bresenham算法准确和高效。Bresenham算法比DDA算法更精确和高效。
算术DDA算法使用浮点,即实运算。Bresenham算法使用不动点,即整数算术。
圆满DDA算法将坐标四舍五入为最接近直线的整数。Bresenham的算法不舍入,而是在其操作中采用增量值。
绘画DDA算法可以绘制精度较低的圆和曲线。Bresenham算法可以更精确地绘制圆和曲线。
速度DDA算法比Bresenham算法慢,因为它使用实算术浮点运算。Bresenham算法比DDA算法更快,因为它使用整数算法。
复杂性在DDA算法中,计算复杂度更高。在Bresenham算法中,计算复杂度很简单。
费用DDA算法比Bresenham算法成本更高。Bresenham算法比DDA算法便宜。

Also Read: Difference Between Prim’s And Kruskal’s Algorithm

关于dda和bresenhams,您需要了解什么

  • Bresenham算法是由J.E.Bresenham1962年开发的,它比DDA更精确、更高效。
  • 它扫描坐标,但不是四舍五入,而是通过加法或减法考虑增量值,因此可用于绘制圆和曲线。
  • 因此,如果要在两个点x和y之间画一条线,那么下一个坐标将是(xa+1,ya)和(xa+1,Yaa+1),其中a是下一个座标的增量值,这两个座标之间的差将通过减去或添加由它们形成的方程来计算。
  • DDA算法在绘制直线时比Bresenhams算法慢,因为它使用实运算(浮点运算)。
  • DDA使用浮点,而Bresenham算法使用固定点。
  • DDA将坐标四舍五入到最接近的整数,但Bresenham算法不这样做。
  • Bresenham算法比DDA更精确和高效。
  • Bresenham算法可以比DDA更精确地绘制圆和曲线。
  • DDA使用方程的乘法和除法,但Bresenham算法仅使用减法和加法。
  • Bresenhams算法在直线绘制中比DDA算法更快,因为它在计算中只执行加法和减法,并且只使用整数算法,因此运行速度明显更快。
  • Bresenhm算法不舍入,而是在其操作中采用增量值。

Also Read: Difference Between RSA And DSA Algorithm

  • 发表于 2022-09-10 09:17
  • 阅读 ( 48 )
  • 分类:IT

你可能感兴趣的文章

适应的(adaptive)和非自适应路由算法(non adaptive routing algorithms)的区别

...应路由算法 5. 摘要 什么是自适应路由算法(adaptive routing algorithms)? 动态路由或自适应路由使用自适应算法。这些算法根据拓扑结构和网络流量改变路由决策。相邻路由器或所有路由器提供路由信息。主要的优化参数是一些跳数...

  • 发布于 2020-10-18 20:02
  • 阅读 ( 586 )

早期的(early)和后期装订(late binding)的区别

...  图06:后期装订主程序 根据上面的程序,类形状有一个绘制方法。类圆类和三角形类扩展了形状类。因此,这两个类可以继承Shape类的属性和方法。Shape类是基类。类是派生类和圆类。类圆和类三角形也有自己的实现的draw方法...

  • 发布于 2020-10-19 04:05
  • 阅读 ( 378 )

算法(algorithm)和流程图(flowchart)的区别

...列比较-算法与表格形式的流程图 6. 摘要 什么是算法(an algorithm)? 每一个任务都是根据一个算法来完成的。如果Facebook有一个这样的问题,那么它将如何在一个日志中出现。首先,用户应该打开浏览器。然后他应该输入正确的网...

  • 发布于 2020-10-19 17:44
  • 阅读 ( 852 )

静态绑定(static binding)和动态绑定(dynamic binding)的区别

...写中。指用Java编写的程序。 公共类形状(){ 公共无效绘制(){ System.out.println(“绘制”); } } 公共类Circle()扩展形状{ 公共无效绘制(){ System.out.println(“画圆”); } } 公共类Triangle()扩展形状{ 公共无效绘制(){ S...

  • 发布于 2020-10-19 17:49
  • 阅读 ( 410 )

什么是伪码(what is the pseudocode)和算法?(algorithm?)的区别

简单来说,伪代码是一种描述算法逻辑的叙述。 伪代码不是可执行代码,因此不必使用精确的语法;但是,遵循业界广泛使用的标准是很有帮助的,解决方案团队可以很容易地理解该标准。 统一建模语言(UML)和其他业务...

  • 发布于 2021-06-24 23:47
  • 阅读 ( 1607 )

遗传算法(genetic algorithm)和传统算法(traditional algorithm)的区别

...、搜索、排序、分治、传统算法 什么是遗传算法(genetic algorithm)? 遗传算法是指基于遗传和自然选择的一类算法。这与物种适应环境变化并能够生存的过程相似。换句话说,它是建立在生物进化的基础上的。 此外,该算法不断...

  • 发布于 2021-07-01 15:41
  • 阅读 ( 235 )

流程图(flowchart)和算法(带图片)(algorithm (with pictures))的区别

...之前,他必须在几分钟内检查流程图。 什么是算法(an algorithm)? 算法是一个定义良好的逐步过程,用于处理数据(为特定问题提供解决方案)。Analogrithm准确地定义了程序执行操作所需的步骤。它包括输入、输出和逻辑...

  • 发布于 2021-11-27 16:25
  • 阅读 ( 315 )

如何在photoshop中绘制曲线(draw curved lines in photoshop)

...点上。 4设置曲线的起点和坡度。单击并将光标拖动到直线的弧线方向,到达曲线顶部后释放鼠标。释放光标的点是曲线顶点将到达的点。 5创建曲线的第二个点。单击并按住希望线从初始起点连接的点,然后沿与设置坡度时...

  • 发布于 2022-03-24 02:33
  • 阅读 ( 39 )

如何绘制雷霆角色(draw minecraft characters)

方法1方法1/2:绘制正面布雷艇 1在书页中央画一个小正方形作为页眉。 2.从上面画的方形主体的两侧延伸两条垂直线。将一对垂直的腿连接到上面——一条比另一条短,用于折叠的腿。 3在盒子上加一个屋顶和四个倾斜的正方...

  • 发布于 2022-03-24 03:38
  • 阅读 ( 83 )

如何画海绵宝宝(draw spongebob squarepants)

...大小。画长边大约是短水平线的1 1/2倍。不要为矩形绘制直线,而是使直线呈波浪状且不规则。使海绵头底部比顶部略窄。波浪状的长方形看起来像海绵的轮廓。 2在弯曲矩形的底部绘制一个矩形。要勾勒海绵宝宝躯干的轮廓,...

  • 发布于 2022-03-24 04:37
  • 阅读 ( 44 )
rrznf355rlz
rrznf355rlz

0 篇文章

相关推荐