众所周知的中点圆算法(wikipedia)给出了给定半径圆的像素坐标的x,y坐标。
它使用的计算是迭代的,并在每次迭代时使用一个条件来退出循环:while (y > x) etc...
我的问题是如何提前预测,给定半径,算法返回的总点数是多少?
我的数学背景有限,我无法得出它。我用Google搜索,我发现的唯一内容如下:http://www.gdunge.com/2011/03/23/a-different-kind-of-pi。该页面的作者道格提到他通过实验发现round(sqrt(2) * radius)
可以工作四分之一圈。我尝试了它试图获得整个圈子,它错过了几点。
这个号码背后的实质法律是什么?
答案 0 :(得分:6)
我把你的公式作为基础并得到了这个:
floor((sqrt(2)*(radius-1)+4)/2)*8
它的工作正常。
答案 1 :(得分:1)
如果你查看你所参考的维基百科页面上的图表,你可以看到,在第一个八分圆中,每个像素比前一个像素高一个单位,比前一个像素低一个像素,快速浏览一下算法表明,这个位置的八分圆总是如此。
因此,绘制圆的第一个八分圆所需的像素数是在第一个八分圆中向上移动的像素数。如果半径是r,那么你在第一个八分圆中向上移动的距离是r sin 45度,即r / sqrt(2) - 在45度时我们有一个直角三角形,两边长度为1,斜边长度sqrt(2)。
如果八分圆占用r / sqrt(2),则四分之一圆 - 两个八分圆 - 取r * sqrt(2)
答案 2 :(得分:1)
绘制半径为 r 的圆时,中点圆算法绘制的不同 *像素的数量为
4轮(sqrt(2) r )
或者,等同地,
4楼(sqrt(2) r + 1/2)。
*
许多中点圆算法的实现多次绘制多个像素
重复的实际数量取决于半径和特定的细节
实现。
特别是,由C#
绘制的像素数包括重复
在原帖中引用的算法的实现是
8楼((sqrt(2)/ 2) r + 3/4)+4。