EDIT : 正方形 = 立方体 (ただし、2D 空間で想像した方がよいかもしれませんが、簡単に 3D に変換できます)
と思っていたのですが、解決したようです。ただし、これは単なる「私の」解決策であり、参照はありません。
そのオブジェクトの位置、幅、およびポイントのリストを持つクラス「Square」を作成します。
すべての正方形は、その位置に基づいて配列またはハッシュマップに格納されるため、求める位置がわかっている場合はすばやくアクセスできます。
すべての正方形は定期的に分散されるため、「ポイント インスタンス」の観点からは、既存のすべての正方形を知っていなくても、自分がどの正方形に属しているかを一定時間で把握できます。(例: 幅 40 の正方形があり、それらは 20 の距離で分散されていることを知っています。私は位置 10001 にいるので、位置 9980 と 10000 の正方形に属していることがわかります)
正方形は互いに交差するため、1 つの点がより多くの正方形に存在する可能性があります。
何かを行うとき、ポイントごとに、ポイントが属する正方形に保存されているポイントのみをチェックします。もちろん、目標を達成するには、正方形が十分に大きく、十分に交差している必要があります。
ポイントが移動するとき、それらは正方形への登録と登録解除を担当します。
1D の例:
クラス :Line segment
およびPoint
Attrributes:
Line segment
: int position
,List<Points> points
Point
: int position
,List<LineSegment> lineSegments
20 の距離にある点のみとやり取りしたい。
そこで、幅 40 のインスタンスを作成し、Line segments
それらを 20 の距離に 1 つずつ配置します。
したがって、それらは位置 0、20、40、60 .... になります。
最初のものはエリア 0 ~ 40、2 つ目は 20 ~ 60 などをカバーします。
それらを配列に入れ、既知の位置ですばやくアクセスできます。arrayOfLineSegments[position/20]
ポイントを作成するとき、line segments
それが属する に彼を追加します。
更新すると、各ポイントは lineSegments 内のポイントとのみ相互作用します。
ポイントを移動すると、それが属する lineSegments が登録および登録解除されます。