Algorithm 以半径r为圆心的圆内/沿圆的快速整数坐标

Algorithm 以半径r为圆心的圆内/沿圆的快速整数坐标,algorithm,performance,geometry,Algorithm,Performance,Geometry,假设有一个圆心为0,0,半径为r的圆 我想得到这个圆内所有可用的整数点。这个问题很容易解决 你可以在x=-r到+r和y=-r到+r的正方形上迭代,看看x*x+y*y你是否可以通过计算最大值y来直接得到值,最大值y是垂直于x的圆上点的第二个坐标,x的每个值为0,如下所示: for x in [-floor(r), floor(r)] y_max = floor(sqrt(r^2 - x^2)) # Pythagora's theorem for y in [-y_max, y

假设有一个圆心为0,0,半径为r的圆

我想得到这个圆内所有可用的整数点。这个问题很容易解决


你可以在x=-r到+r和y=-r到+r的正方形上迭代,看看x*x+y*y你是否可以通过计算最大值y来直接得到值,最大值y是垂直于x的圆上点的第二个坐标,x的每个值为0,如下所示:

for x in [-floor(r), floor(r)]
    y_max = floor(sqrt(r^2 - x^2))    # Pythagora's theorem
    for y in [-y_max, y_max]
        # (x, y) is good !
我不认为你可以做得更好,也许你可以更快地计算y_max,但这不会是一个大胜利,因为不管怎样,你在结果中有这些分数

编辑:

这是π*r^2的时间,这是你能做的最少的时间,因为它是点数。
你可以通过只做四分之一个圆,然后通过对称得到其他的,来节省一些计算,但是我甚至不确定它是否更快,而且它肯定要写更长的时间

我想指出,我知道这个问题,但不知道我们是否可以做得更好。