题目:

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

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

解决方案:

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

1. 预处理阶段:

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

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

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

2. 计算点所在区域:

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

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

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

延伸:

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

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

计算点在哪些四边形内相关推荐

  1. 判断点是否在四边形内

    参考网上资料,这里采用2种方法判断一个点,是否在四边形内. 方法一:向量积计算法.可以适用于任何形状的四边形,或者多边形: 方法二:面积计算法.只适用于凸四边形,或者凸多边形: 代码如下,分别用2种方 ...

  2. python判断点在四边形内

    只针对凸四边形: 如果是三角形,五边形呢?这个代码是否有效,还没测 import globclass Point():def __init__(self, x,y):self.x=xself.y=yd ...

  3. 如何判断一个点在任意四边形内

    通过面积法,判断点P是否在四边形(A,B,C,D)内.如果在四边形内,则四边形的面积=面积(P,A,B)+面积(P,B,C)+面积(P,C,D)+面积(P,D,A),反之不在四边形内. 此处我将判断方 ...

  4. 判断点是否在给定四边形内的算法

    注意:凹凸多边形的定义 凸多边形:每个内角都是锐角或钝角,也就是没有大于180°的优角的多边形. 凹多边形:至少有一个优角的多边形.凸多边形就是把一个多边形任意一边向两方无限延长成为一条直线,如果多边 ...

  5. 判断一个点是否在给定的凸四边形内

    转载:https://www.cnblogs.com/carekee/articles/3731713.html 方法一: 如果一个点在这个凸四边形内,那么按照顺时针方向,该点一定在每条边的右侧.可使 ...

  6. 判断一个点在任意四边形内

    通过面积法,判断点P是否在四边形(A,B,C,D)内. 如果在四边形内,则四边形的面积=面积(P,A,B)+面积(P,B,C)+面积(P,C,D)+面积(P,D,A); 反之不在四边形内. Java代 ...

  7. 任意凸四边形内最大矩形

    不知道算的对不对,请大家留言指正 已知条件: 四边形的各点坐标. 矩形长宽比d. 假设四边形如下,因为是最大矩形所以肯定至少有3点与3边相交. 由三角形的内角与边的公式可知: L1=dw * sin( ...

  8. 判断点是否在图形(矩形、椭圆、多边形)内的算法(一)

    我们在下面的介绍中,只讨论三种图形,分别是矩形(包括正方形).椭圆(包括圆)和多边形.对于矩形和椭圆,比较常见的描述方法是(x,y,w,h),另外再加一个旋转角度a(绕中心旋转).而对于多边形,一般的 ...

  9. 判断点是否位于凸四边形的内部

    已知四边形(凸四边形)的四个点A.B.C.D(按逆时针顺序)的坐标,求点P是否在ABCD所围成的四边形内,可以通过向量叉乘的方法实现. 原文来自:http://www.dewen.io/q/5805/ ...

最新文章

  1. vue 返回滚动条顶部组件_vue中回到顶部
  2. 转:linux的源码查看, c++语法 查看网站
  3. 配置Goldengate支持DDL
  4. 刚刚,改造了下BaseDao……
  5. html代码在线分析,网站html代码解析
  6. Scintilla的高级技法
  7. 经典作品推荐CLANNAD(含下载、汉化、周边和攻略,真正全语音)
  8. 华为云服务器linux部署项目简单步骤小结(超级详细)
  9. Python函数和面向对象,小白看了都说好
  10. 齐岳提供的双核金属铱配合物黏度探针C10((df-ppy)2Ir(bpy)(CH2)10(bpy)Ir(btph)22+)-
  11. 如何破解Word锁定文件的方法
  12. 点到平面的距离(最短距离)
  13. PyQt制作二维码生成器
  14. 【人工智能】孙正义用30张PPT描述了一个未来
  15. JavaScript编程精粹
  16. Google啊,你伤不起啊伤不起
  17. Elo rating system(测试版)
  18. 机器学习Highway网络结构
  19. RAMPS1.4 3d打印控制板接线与测试1
  20. 蓝牙5.1低功耗SOC 私有协议2.4GHz芯片HS6621

热门文章

  1. Linux时间与NTP
  2. Xcode下的中文乱码问题
  3. 正则判断手机号是不是11位
  4. Android学习笔记之图像颜色处理(ColorMatrix)
  5. 表生成器@TableGenerator
  6. MYSQL远程登录报错: Error No. 2003
  7. mac ipmessage
  8. 生命是一连串长期而持续的累积
  9. eclipse改变默认的编码格式(UTF-8)
  10. Burst Balloons