我研究过的关于Bresenham线算法的每篇文章都讨论了一个决策变量
Pi = dx * (d1 - d2)
这个mathematical term
的想法来自哪里?
我的意思是,将dx * (d1 - d2)
作为决策变量背后的想法是什么?
为什么d1 - d2
没有被采用?
答案 0 :(得分:2)
因为我们在d1-d2
中关注的唯一信息是符号,我们可以将其乘以任何正值而不会丢失任何内容。我们实际上并不知道d1
和d2
在算法中的价值,并且必须从我们知道的事物中计算它们的值。但是,此计算涉及除dX
,除法很慢,如果可能,应避免。碰巧的是,dX
始终为正,因此我们可以将d1
和d2
乘以dX
来删除除法运算,而不会丢失我们要查找的信息。
答案 1 :(得分:1)
Bresenham的算法通过专注于切成45度截面的圆的单个部分来工作,并且仅解决其中一个。通过考虑可以从点x1,y1(即传入的第一个参数)绘制的所有线来形成圆。然而,由于它只关注一个部分(即假设x在正方向上比y上升得快),为了将解决方案推广到可能形成的所有线,它必须将该圆的所有其他部分转换为一个它知道如何绘制圆圈的方式。通常,您会看到一些初始化代码,该算法的顶部确保x1,y1< x2,y2并交换它们,如果这不成立。这有效地将圆圈按其必须处理的线数减半。所以现在代码的下一部分只需要处理4个不同的斜率。决策变量是一种优化,用于确定算法属于哪四个部分。我们总是朝正X方向前进,但问题是我们上升/下降的速度比X快(第1和第4部分 - 顺时针开始的位置)还是X比Y移动得更快(第2和第3部分)。
决策变量使我们不必在循环的每次迭代中执行if语句。