数字差分算法(DDA)和Bresenhams算法是数字线绘制算法,在计算机图形学中用于绘制图形。以前,我们使用分析分析仪来计算像素,因此可以绘制线条。但是这些分析方法不如数字方法精确,随着这些数字算法的使用,我们在计算机图形学中也发明了更高质量的方法。这些算法的发明就是一个完美的例子。在我们继续之前,让我们看看这些算法背后的概念。虽然这似乎不在我们讨论的范围之内,但有必要指出两者的基本区别。如果你真的很熟悉这些算法,你可以跳转到本页末尾的实际差异。
DDA主要用于在计算机图形学中绘制线,在预测下一个像素值时使用实际值。假设初始像素值为(X0,Y0)(X0,Y0),目标像素为(X1,Y1)(X1,Y1)。我们将学习如何从已知像素值(X0,Y0)(X0,Y0)计算目标像素值,如下所示。
第一步:这里有输入(X0,Y0)(X0,Y0),我们应该确定直线是平行于x轴还是y轴。为了找到它,现在让我们计算初始和目标像素值之间的差异。
dx=X1–X0
dy=Y1–Y0
第二步:现在,我们已经确定了差异,如果‘dx’为零,我们应该沿着x轴画一条线,否则,我们应该画一条平行于y轴的线。这是用计算机语言进行的实际计算。
if(绝对(dx)>绝对(dy))
步长=绝对(dx);
其他的
阶跃=绝对(dy);
步骤3:现在,是时候确定实际的“x”坐标或“y”坐标像素值,以便绘制线。
X增量=dx/(浮点)步数;
Y增量=dy/(浮点)步数;
第四步:这必须计算,直到我们到达目标像素。DDA算法在执行计算时将像素值舍入到最接近的整数值。下面是我们现在讨论的代码示例。
对于(int v=0;v<步数;(v++)
{
x=x+x增量;
y=y+y增量;
像素(圆形(x),圆形(y));
}
我们已经用DDA画好了线,现在让我们继续去布雷森汉姆吧!
它也是一种数字线绘制算法,由Bresenham于1962年发明,因此它也有了相同的名称。该算法采用减法运算,精度更高;除了在绘制线时计算像素值之外。Bresenham算法在绘制曲线时的精度是可靠的;圆圈也是。让我们看看这个算法是如何工作的。
第一步:Bresenham算法假设初始像素坐标为(xa+1,ya)。
第二步:它自动计算下一个像素值为(xa+1,ya+1),这里‘a’是增量值,算法通过加上或减去它形成的方程来计算。
这种算法计算准确的值没有舍入,看起来也更容易!
现在让我们考虑点(0,0)和(-8,-4),并使用Bresenham算法在这些点之间画一条线。
给定数据,(x1,y1)=(0,0)和(x2,y2)=(-8,-4)。
现在让我们计算微分值如下。
∆x=x2-x1=-8-0=8
因此,x的增量值=∆x/x2=8/-8=-1。
∆y=y2-y1=-4-0=4
因此,y的增量值=∆y/y2=4/-4=-1。
决策变量=e=2*(∆年)-(∆十)
因此,e=2*(4)-(8)=8-8=0
通过上面的计算,让我们将结果值制成表格。y坐标的值是根据一个决策变量来调整的,这里我们忽略了它的计算。
像素 | 十 | y | 决策变量 |
(0,0) | 0 | 0 | 0 |
(-1,0) | -1 | 0 | 价值观 |
(-2,-1) | -2 | -1 | 0 |
(-3,-1) | -3 | -1 | 价值观 |
(-4,-2) | -4 | -2 | 0 |
(-5,-2) | -5 | -2 | 价值观 |
(-6,-3) | -6 | -3 | 0 |
(-7,-3) | -7 | -3 | 价值观 |
(-8,-4) | -8 | -4 | 0 |
DDA在计算中使用实值,并使用浮点。下一个像素或点的值由微分方程确定
X增量=dx/(浮点)步数
Y增量=dy/(浮点)步数
这里不使用固定常数,但在Bresenham算法中,不动点用于算术计算。与DDA不同,Bresenham的算法使用整数算法。
DDA通过乘法和除法运算求解微分方程。你可以注意到同样的情况,X增量=dx/(float)步数。Bresenham的算法使用加法和减法运算,您可以在下一个像素值计算公式(xa+1,ya+1)中注意到这一点。与DDA相比,Bresenham的算法更简单。
正如我们前面所讨论的,Bresenham的算法使用了比DDA更简单的算法,并且得到了有效的结果。
X增量=dx/(浮点)步数
您可能会注意到“float”,因此它不会舍入值,而Bresenham的算法将值舍入到最接近的整数。因此,在Bresenham算法中使用的值更简单。
DDA除了绘制直线外,还能绘制圆和曲线。Bresenham算法也能画出上述所有的图形,其精度比DDA算法要高。类似地,Bresenham算法可以得到比DDA算法更有效的曲线。两种算法都可以绘制三角形和多边形。
由于DDA也包含舍入,因此它比使用Bresenham算法要昂贵。
从我们上面的讨论可以很清楚地看出,Bresenham算法在速度、成本和操作使用方面都是优化的。
让我们以表格的形式看一下这些区别。
序号 | 差异 | 数字微分算法 | Bresenham算法 |
1. | 为什么叫这个名字? | 仅仅因为它是方程的数字实现,它就有了这个名字。 | 它是由J.E.Bresenham在1962年发明的,因此得名。 |
2. | 计算 | 它涉及到更复杂的计算。 | 使用的计算非常简单。 |
3. | 使用的操作类型 | 它使用乘法和除法。这里使用的示例微分方程是Xincrement=dx/(float)步,Yincrement=dy/(float)步。 | 它使用加减法。这里的示例计算可以表示为(xa+1,ya+1)。 |
4. | 算术计算值 | 它使用浮点值。 | 它只使用整数值。 |
5. | 效率 | 复杂的运算会降低效率。 | 算法越简单,效率就越高。 |
6. | 速度 | 乘法和除法运算的使用在计算过程中花费了大量的时间。 | 使用加法和减法运算所花费的时间比DDA少。 |
7. | 准确度 | 准确度较低。 | 它更准确。 |
8. | 舍入 | 它使用实际值,从不舍入值。 | 它将值舍入为最接近的整数值。 |
9 | 绘图能力 | 它能够绘制直线、圆和曲线,但精度较低。我们甚至可以用这个算法画三角形和多边形。 | 它能够以更高的效率绘制直线、圆和曲线。该算法还可以绘制三角形和多边形。 |
10 | 计算成本 | 这是昂贵的,因为它涉及四舍五入以及。 | Bresenham算法的使用比DDA算法便宜。 |
11 | 优化算法 | 它不是一个优化算法 | 这是一个优化算法。 |
我们已经处理了DDA和Bresenham算法之间的所有可能的差异。它甚至似乎是重复的,但有一些正当的理由再次提到这些点,你会知道当你完全理解它。如果您仍然觉得存在歧义,请给我们留言。让我们通过分享适当的知识来共同学习!
...应路由算法 5. 摘要 什么是自适应路由算法(adaptive routing algorithms)? 动态路由或自适应路由使用自适应算法。这些算法根据拓扑结构和网络流量改变路由决策。相邻路由器或所有路由器提供路由信息。主要的优化参数是一些跳数...
...列比较-算法与表格形式的流程图 6. 摘要 什么是算法(an algorithm)? 每一个任务都是根据一个算法来完成的。如果Facebook有一个这样的问题,那么它将如何在一个日志中出现。首先,用户应该打开浏览器。然后他应该输入正确的网...
简单来说,伪代码是一种描述算法逻辑的叙述。 伪代码不是可执行代码,因此不必使用精确的语法;但是,遵循业界广泛使用的标准是很有帮助的,解决方案团队可以很容易地理解该标准。 统一建模语言(UML)和其他业务...
...区别的比较 关键术语 算法,伪代码,编程 什么是算法(algorithm)? 算法是一个逐步解决问题的过程。过程是一个有限的指令序列,每个指令在有限的时间内执行。每一个问题都可以借助一个算法来解决。例如,当用户想要登录...
...语 图,克鲁希尔算法,PRM算法,树 什么是prims算法(prims algorithm)? Prim的算法有助于从图中找到最小生成树。它确定包含图的每个顶点的边的子集。它还减少了边的权重之和。此外,该算法从根节点开始,在每一步检查所有相邻...
...、搜索、排序、分治、传统算法 什么是遗传算法(genetic algorithm)? 遗传算法是指基于遗传和自然选择的一类算法。这与物种适应环境变化并能够生存的过程相似。换句话说,它是建立在生物进化的基础上的。 此外,该算法不断...
...学方程式的系数。 问题 观察到以下反应:2A+bB→ cC+DDA随着反应的进行,浓度以这些速率变化RateA=0.050 mol/L·srateB=0.150 mol/L·srateC=0.075 mol/L·srateD=0.025 mol/L·S系数b、c和d的值是什么? 解决方案 化学反应速率测量单位时间内...
...之前,他必须在几分钟内检查流程图。 什么是算法(an algorithm)? 算法是一个定义良好的逐步过程,用于处理数据(为特定问题提供解决方案)。Analogrithm准确地定义了程序执行操作所需的步骤。它包括输入、输出和逻辑...
密码算法是一系列过程或规则,用于在密码系统中对消息进行加密和解密。简单地说,它们是通过确保不需要的人不能访问数据来保护数据的过程。这些算法有着广泛的用...
在其最普遍的意义上,算法是从已知开始产生可预测的结束状态的任何一组详细指令。然而,算法只与给出的指令一样好,如果没有正确定义算法,结果将是不正确的。 ...