我有大量的 2D 点,我想快速获取位于某个矩形中的点。让我们说一个'。是任意点,“X”是我想在一个矩形内找到的点,该矩形将“T”作为 TopLeft,“B”作为 BottomRight 点:
. . . . . .
. T-----+ .
. | X X | .
. +-----B .
. . . . . .
我尝试了一个带有排序函子的 std::set ,它在集合的开头对 TopLeft 点进行排序,在集合的末尾对 BottomRight 进行排序。当先按 X 值排序时,这将导致找到以下点。
. . . . . .
. T-----+ .
X | X X | X
. +-----B .
. . . . . .
这意味着我必须检查每个找到的点,它是否真的在矩形内。不是很好。
有什么更好的方法来做到这一点?
我的语言是 C++ (Windows),我有 STL 和 boost 可用。
更新
到目前为止阅读了答案,我注意到我没有考虑到我的问题的所有参数:没有一个固定的矩形。矩形可以由用户在运行时设置。这意味着对点集进行排序有望比在此更新之前 Artelius 建议的通过所有点进行线性搜索更有效。不过,我还是会试一试!我不希望用户非常频繁地设置矩形。因此,关于实施工作,它可能对我来说是一个很好的解决方案。