计算点在哪些四边形内

题目:

一个平面中,有很多正四边形,大小不一,任意四边形之间可以有重叠部分,如下图所示

现在有2000个点,如何快速定位这些点分别属于哪些四边形区域?

 

解决方案:

采用区域分割+hash查找的方法。

1. 预处理阶段:

X将四边形按照左边进行排序,然后逐一按照X轴划分区域,如图:

然后,将每一个区域的左边界和右边界作为key,所包含的四边形作为value,存入哈希表中。

 

同理,Y轴也按照这个方式存储成另外一个哈希表。

 

2. 计算点所在区域:

来一个点之后,先按照X轴找到所在区域,然后按照哈希表找到可能在的四边形,例如:找到 1,3,5

再按照Y轴找到所在区域,然后按照哈希表找到可能在的四边形,例如:找到3,4

最后将二者求一个交集,就得到了所在四边形,例如:3

 

延伸:

上述分析中,存成了两个维度的哈希表。更进一步的,其实可以将两个维度合并,同时按照X,Y轴进行切分,形成一个个小四边形区域,再将这些区域所包含四边形作为value,存入哈希表即可。

 

以上是初步思考的结果,如果有更好的方法,欢迎不吝赐教。

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2012-08-24 10:24  wangicter的博客  阅读(187)  评论(0编辑  收藏  举报