编辑:Square = Cube(但是在 2D 空间中想象它可能会更好,然后您可以轻松地将其转换为 3D)
我在想,我想我解决了。然而,这只是“我的”解决方案,我没有参考。
您创建类“Square”,它具有该对象中的位置、宽度和点列表。
所有方块都将根据它们的位置存储在数组或哈希图中,因此如果您知道要寻找的位置,就可以快速访问它们。
所有方格都会有规律地分布,所以——从“点实例”的角度来看——你不必知道所有现有的方格就可以在恒定时间内找出你属于哪个方格。(例如:我知道有宽度为 40 的正方形,它们的分布距离为 20。我在位置 10001,所以我知道我属于位置 9980 和 10000 的正方形)
正方形会相互交叉,因此一个点可以在多个正方形中。
当你做某事时,对于每个点,你只检查点,这些点存储在该点所属的方格中。当然 - 正方形必须足够大并且足够交叉才能实现您的目标。
当点移动时,它们负责注册和取消注册到方格中。
一维示例:
类:Line segment
和Point
Attrributes:
Line segment
: int position
,List<Points> points
Point
: int position
,List<LineSegment> lineSegments
我只想与距离为 20 的点进行交互。
所以我创建Line segments
了宽度为 40 的实例,并将它们一一放置在 20 的距离内。
所以他们将在位置 0, 20, 40, 60 ....
第一个将覆盖区域 0-40,第二个将覆盖区域 20-60 等。
我将它们放入数组中,并且位置已知,我可以快速访问它们:arrayOfLineSegments[position/20]
当我创建点时,我将他添加到line segments
它所属的位置。
当我更新时,每个点只与 lineSegments 中的点交互。
当我移动点时,它会注册和注销它所属的 lineSegments。