半径rで0,0の中心を持つ円があるとします。高速整数座標円内/円に沿って半径rの元を中心に
このサークルの内側にあるすべての整数点を取得したいと思います。この問題は簡単に解決できます。
x = -r to +r
とy =-r to +r
からif x * x + y * y <= r * r
を参照してください。もしそうなら、結果にポイントを追加してください。
ただし、これを行う最も簡単な方法は何ですか? (2r)^2
から4/3 r^2
より具体的には、私は刻まれた四角形の長さを計算し、残りの残りのコンポーネントを追加できるという気持ちがあります。私はこれをどうやって行うのか分からない。数学は少し緻密です。私は一般的なアルゴリズムの応答をしたいのでコードを投稿するのを控えていますが、もし好みがあれば、これはJVM言語を使うべきであるという最終的なベンチマークを述べるかもしれません。
助けが必要ですか?
注:これはガウスサークルの問題と似ていますが、ポイントの数をカウントする代わりに、ポイントが何であるかを知りたいと思います。
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 !
:
私はこの質問に気付いていますが、私たちがうまくいくかどうか疑問に思っていました。 http://stackoverflow.com/questions/14285358/find-all-integer-coordinates-in-a-given-radius – mattsap