algorithm - 布雷森纳姆圆算法

标签 algorithm computer-science pseudocode bresenham graphical-programming

https://www.geeksforgeeks.org/bresenhams-circle-drawing-algorithm/

我正在研究 Bresenham 的算法,我正在尝试使用它来制作 MS 绘画风格应用程序。我已经将它实现到 python 中并且它可以工作。但是,我不确定这是如何运作的。我理解了除了决策参数之外的所有算法。具体为什么它必须是 d = 3 – (2 * r) , d = d + (4*x) + 6d = d + 4 * (x – y) + 10 。有谁熟悉该算法或了解这些算法背后的数学原理吗?我理解直线算法背后的理论,但我很难理解圆形的绘制。

最佳答案

如果您刚刚绘制了像素(x,y),那么下一个要绘制的像素是(x+1,y)(x +1,y-1)

所使用的实际条件决定选择哪一个大约哪一个最接近理想圆。具体来说,如果(x+1)² + y² - r² > r² - (x+1)² - (y-1)²<,则选择(x+1,y-1)/strong>

收集相似项,简化为2(x+1)² + y² + (y-1)² - 2r² > 0

展开得到2x² + 2y² - 2r² + 4x - 2y + 3 > 0

左边的表达式是d。最初,x=0y=r,因此这些项中的大多数为零或相互抵消,我们有d = 3 - 2y = 3 - 2r

您询问的其他表达式表示您选择下一个像素后 d 如何变化。

http://www.wolframalpha.com/input/?i=simplify+(2(x%2B2)%C2%B2+%2B+(y-1)%C2%B2+%2B+(y-2)%C2%B2+-+2r%C2%B2)+-+(2(x%2B1)%C2%B2+%2B+y%C2%B2+%2B+(y-1)%C2%B2+-+2r%C2%B2)

http://www.wolframalpha.com/input/?i=simplify+(2(x%2B2)%C2%B2+%2B+y%C2%B2+%2B+(y-1)%C2%B2+-+2r%C2%B2)+-+(2(x%2B1)%C2%B2+%2B+y%C2%B2+%2B+(y-1)%C2%B2+-+2r%C2%B2)

关于algorithm - 布雷森纳姆圆算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51904260/

相关文章:

Python 即时排序

c++ - 递归方法递减和递增,奇数和偶数

math - 如何缩小具有已知最小值和未知最大值的数字范围

python - 伪代码解释

algorithm - 计算图的总度数

python - 将已见集用于有向图与无向图

python - 这是快速排序还是合并排序?

java - 组合 n 中大小为 k 的唯一组以满足特定要求的最佳方法

linux - Scheme 中的二次公式

algorithm - 仅网络贝叶斯分类器的伪代码