我有一个区域已经划分为数十个子区域(想象一个分为州的国家)。
现在我有一个点坐标,什么是最好的算法来告诉我这个点的位置是什么?
当然我可以按子区域匹配子区域,但那是愚蠢的,因为我必须平均搜索其中一半?
是否有算法确定如何将几个相邻的子区域组合在一起以方便搜索,从而优化搜索次数?
答案 0 :(得分:1)
我首先要消除所有无法解决问题的领域。
假设你有一个2D笛卡尔坐标系,你有一个点作为二维矢量,这些区域被描述为它们的边界点的集合。
然后,您可以按照最小和最大x
和y
坐标(总共4种排序方式)对区域进行排序。您可以删除所有最小x
坐标大于您的点x
坐标等的区域。
之后,您可以使用简单的ray-casting algorithm检查剩余的多边形,并且您应该做得很好。
如果你有一个结构可以保持区域在所有不同的方向排序,这是非常有效的,因为你可以在对数时间内消除区域。