计算点在哪些四边形内
题目:
一个平面中,有很多正四边形,大小不一,任意四边形之间可以有重叠部分,如下图所示
现在有2000个点,如何快速定位这些点分别属于哪些四边形区域?
解决方案:
采用区域分割+hash查找的方法。
1. 预处理阶段:
X将四边形按照左边进行排序,然后逐一按照X轴划分区域,如图:
然后,将每一个区域的左边界和右边界作为key,所包含的四边形作为value,存入哈希表中。
同理,Y轴也按照这个方式存储成另外一个哈希表。
2. 计算点所在区域:
来一个点之后,先按照X轴找到所在区域,然后按照哈希表找到可能在的四边形,例如:找到 1,3,5
再按照Y轴找到所在区域,然后按照哈希表找到可能在的四边形,例如:找到3,4
最后将二者求一个交集,就得到了所在四边形,例如:3
延伸:
上述分析中,存成了两个维度的哈希表。更进一步的,其实可以将两个维度合并,同时按照X,Y轴进行切分,形成一个个小四边形区域,再将这些区域所包含四边形作为value,存入哈希表即可。
以上是初步思考的结果,如果有更好的方法,欢迎不吝赐教。
计算点在哪些四边形内相关推荐
- 判断点是否在四边形内
参考网上资料,这里采用2种方法判断一个点,是否在四边形内. 方法一:向量积计算法.可以适用于任何形状的四边形,或者多边形: 方法二:面积计算法.只适用于凸四边形,或者凸多边形: 代码如下,分别用2种方 ...
- python判断点在四边形内
只针对凸四边形: 如果是三角形,五边形呢?这个代码是否有效,还没测 import globclass Point():def __init__(self, x,y):self.x=xself.y=yd ...
- 如何判断一个点在任意四边形内
通过面积法,判断点P是否在四边形(A,B,C,D)内.如果在四边形内,则四边形的面积=面积(P,A,B)+面积(P,B,C)+面积(P,C,D)+面积(P,D,A),反之不在四边形内. 此处我将判断方 ...
- 判断点是否在给定四边形内的算法
注意:凹凸多边形的定义 凸多边形:每个内角都是锐角或钝角,也就是没有大于180°的优角的多边形. 凹多边形:至少有一个优角的多边形.凸多边形就是把一个多边形任意一边向两方无限延长成为一条直线,如果多边 ...
- 判断一个点是否在给定的凸四边形内
转载:https://www.cnblogs.com/carekee/articles/3731713.html 方法一: 如果一个点在这个凸四边形内,那么按照顺时针方向,该点一定在每条边的右侧.可使 ...
- 判断一个点在任意四边形内
通过面积法,判断点P是否在四边形(A,B,C,D)内. 如果在四边形内,则四边形的面积=面积(P,A,B)+面积(P,B,C)+面积(P,C,D)+面积(P,D,A); 反之不在四边形内. Java代 ...
- 任意凸四边形内最大矩形
不知道算的对不对,请大家留言指正 已知条件: 四边形的各点坐标. 矩形长宽比d. 假设四边形如下,因为是最大矩形所以肯定至少有3点与3边相交. 由三角形的内角与边的公式可知: L1=dw * sin( ...
- 判断点是否在图形(矩形、椭圆、多边形)内的算法(一)
我们在下面的介绍中,只讨论三种图形,分别是矩形(包括正方形).椭圆(包括圆)和多边形.对于矩形和椭圆,比较常见的描述方法是(x,y,w,h),另外再加一个旋转角度a(绕中心旋转).而对于多边形,一般的 ...
- 判断点是否位于凸四边形的内部
已知四边形(凸四边形)的四个点A.B.C.D(按逆时针顺序)的坐标,求点P是否在ABCD所围成的四边形内,可以通过向量叉乘的方法实现. 原文来自:http://www.dewen.io/q/5805/ ...
最新文章
- vue 返回滚动条顶部组件_vue中回到顶部
- 转:linux的源码查看, c++语法 查看网站
- 配置Goldengate支持DDL
- 刚刚,改造了下BaseDao……
- html代码在线分析,网站html代码解析
- Scintilla的高级技法
- 经典作品推荐CLANNAD(含下载、汉化、周边和攻略,真正全语音)
- 华为云服务器linux部署项目简单步骤小结(超级详细)
- Python函数和面向对象,小白看了都说好
- 齐岳提供的双核金属铱配合物黏度探针C10((df-ppy)2Ir(bpy)(CH2)10(bpy)Ir(btph)22+)-
- 如何破解Word锁定文件的方法
- 点到平面的距离(最短距离)
- PyQt制作二维码生成器
- 【人工智能】孙正义用30张PPT描述了一个未来
- JavaScript编程精粹
- Google啊,你伤不起啊伤不起
- Elo rating system(测试版)
- 机器学习Highway网络结构
- RAMPS1.4 3d打印控制板接线与测试1
- 蓝牙5.1低功耗SOC 私有协议2.4GHz芯片HS6621