Algorithm 布雷森厄姆&x2019;s圆算法

Algorithm 布雷森厄姆&x2019;s圆算法,algorithm,computer-science,pseudocode,bresenham,graphical-programming,Algorithm,Computer Science,Pseudocode,Bresenham,Graphical Programming,我在看Bresenham的算法,我正试图用它来制作一个MS绘画风格的应用程序。我已经在python中实现了它,它可以正常工作。然而,我不确定这是如何工作的。除了决策参数,我了解所有的算法。特别是为什么它必须是d=3–(2*r),d=d+(4*x)+6或d=d+4*(x–y)+10。是否有人熟悉该算法或了解其背后的数学推导过程?我理解直线算法背后的理论,但我很难理解圆的绘制。如果你刚刚绘制了像素(x,y),那么下一个要绘制的像素是(x+1,y)或(x+1,y-1) 使用的实际条件决定了选择哪一个最


我在看Bresenham的算法,我正试图用它来制作一个MS绘画风格的应用程序。我已经在python中实现了它,它可以正常工作。然而,我不确定这是如何工作的。除了决策参数,我了解所有的算法。特别是为什么它必须是
d=3–(2*r)
d=d+(4*x)+6
d=d+4*(x–y)+10
。是否有人熟悉该算法或了解其背后的数学推导过程?我理解直线算法背后的理论,但我很难理解圆的绘制。

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

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

收集相似的术语,简化为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
的变化


在第二段,为什么是“r²-(x+1)²-(y-1)²”而不是“(x+1)²+(y-1)²-r²?这是因为(x+1,y-1)在圆圈内,而(x+1,y)在圆圈外。这篇博文应该可以帮助您: