我正在使用谷歌地图,我试图在给定的缩放级别计算视口中可见的最大点数。
我天真的方法是获取观察区域(坐标)并将其用作“拟合矩形”,并查看该区域中有多少点。 我环顾四周但是找不到任何算法来确定矩形区域中随机点的“最佳拟合”。
这似乎是一个非常常见的问题,所以我可能不知道使用正确的关键字。
任何有助于我找到解决方案的帮助都将受到赞赏。
编辑:感谢您的回答,但我担心我没有说清楚。在所有点上拟合一个矩形几乎是一件微不足道的事情(将它们全部排序,得到最小值/最大值和浊度)。
我想知道的是在FIXED SIZED矩形下可以容纳的最大点数:我有我所有的点和一个固定大小的“移动窗口”,我想知道我可以适应多少点。
对不起的初步解释很抱歉。
干杯。
答案 0 :(得分:3)
要在一组点上找到最合适的矩形,并假设集合中的所有点都需要在矩形内,您需要做的就是在两个维度中找到最小值/最大值。
执行此操作的一种方法是按X维度对点进行排序,并将第一个和最后一个作为该维度中的最小值/最大值,然后在Y维度中重复该过程以获得该最小值/最大值。根据这些信息,您就拥有制作矩形所需的一切。
从计算复杂性的角度来看,复杂性是所用排序算法的复杂性的2倍(因为你必须排序2次)+获取每个排序集的第一个和最后一个元素的复杂性,如果你使用的话例如,数组是O(1)操作。
如果使用合并排序并对数组进行排序,则总体复杂度为O(n log n)。细分为多个操作,您有2(n log n)+ 4。
这不会给你最紧密的矩形集合,因为它不能确保矩形的一边与至少2个点共线(为此你需要@Bart Kiers的旋转卡尺算法建议),但它是一个更快的算法,因为旋转卡尺与我在此描述的完全相同,但随后旋转矩形,直到其中一个边缘与最小/最大点中的2个对齐。