布雷森汉姆的循环算法

时间:2018-08-18 00:28:16

标签: algorithm computer-science pseudocode bresenham graphical-programming

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

我正在查看Bresenham的算法,该算法正试图用于制作MS Paint样式的应用程序。我已经将它实现到python中并且可以工作。但是,我不确定这如何工作。我了解了除决策参数以外的所有算法。具体说明为什么必须是$ awk -F'^' -v OFS=',' '{out=$1; for (i=2;i<=NF;i++) if (sub(/.*`/,"",$i)) out=out OFS $i; print out}' file Gene1 GO:0000045,GO:0005737 Gene2 GO:0000030,GO:0006493,GO:0016020 d = 3 – (2 * r)d = d + (4*x) + 6。是否有人熟悉算法或了解这些算法是如何得出的?我了解线算法背后的理论,但是我很难理解圆图。

1 个答案:

答案 0 :(得分:3)

如果您只是绘制像素(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 = 0 y = r ,因此其中大多数项为零或抵消,我们有 d = 3-2y = 3-2r < / strong>

您要询问的其他表达式表示您选择下一个像素后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)