私は等しい半径の円がある矩形の領域を持っています。私は、どのサークルが他のサークルと重なっているかを知りたい(アウトプットは2要素のオーバーラップサークルのリストである)。重複する円を見つける
円の2つが重なっている(中心間の距離が直径より小さいかどうかを確認する)方法を知っています。すべての円のペアについてこのチェックを実行できますが、より良いアルゴリズム(O(n^2)
より速い)があるかどうか疑問に思っていました。
EDIT
円の数は、通常、約100あると重なり、非常に頻繁に発生しません。
ここにいくつかの文脈があります: 長方形はゲームの戦場です。ユニットの動きは小さなステップで行われ、ユニット間の衝突を検出しようとしています。
良い質問。 :)私はあなたに掃引線アルゴリズムのいくつかの並べ替えを行うことができるようです。 – blazs
Hmmm。 。 。すべての円は他のすべての円と重複する可能性があります。私には、最悪のケースではO(n^2)よりもうまく行かないことが示唆されていますが、それを最適化するヒューリスティックがあるかもしれません。 –
@ GordonLinoff出力の影響を受けやすいアルゴリズムがあるはずです。オーバーラップ数(および円の数)に比例した時間で実行されるアルゴリズムです。これは多少関連したセグメント交差問題の場合である。 – blazs