optimization - 最佳固定矩形区域适合点

标签 optimization geometry

我正在使用 Google map ,我正在尝试计算在给定缩放级别下视口(viewport)中可见点的最大数量。

我天真的方法是获取查看区域(以坐标表示)并将其用作“拟合矩形”并查看有多少点适合该区域。 我环顾四周,但找不到任何“最适合”矩形区域随机点的算法。

这似乎是一个很常见的问题,所以我可能不知道要使用正确的关键字。

如能帮助我找到解决方案,我们将不胜感激。

编辑:感谢您的回答,但恐怕我没有说清楚。在所有点上拟合一个矩形几乎是一件微不足道的事情(对它们进行排序,获取最小值/最大值和 voilà)。
我想知道的是 FIXED SIZED 矩形下可以容纳的最大点数:我有所有点和固定大小的“移动窗口”,我想知道我可以容纳多少点。
抱歉最初的解释不好。

干杯。

最佳答案

要在一组点上找到最适合的矩形,并假设集合中的所有点都需要在矩形内,您需要做的就是找到两个维度的最小值/最大值。

实现此目的的一种方法是按 X 维度对点进行排序,并将第一个和最后一个作为该维度中的最小值/最大值,然后在 Y 维度中重复该过程以获得该最小值/最大值。根据这些信息,您拥有制作矩形所需的一切。

从计算复杂度的角度来看,复杂度是所用排序算法复杂度的 2 倍(因为您必须排序 2 次)+ 获取每个已排序集合的第一个和最后一个元素的复杂度,如果您使用例如,数组是一个 O(1) 操作。

如果您使用归并排序,并排序到数组中,则总体复杂度为 O(n log n)。分解为操作数,您有 2(n log n) + 4。

这不会给你最紧密的一组矩形,因为它不会确保矩形的一侧与至少 2 个点共线(为此你需要旋转卡尺算法,@Bart Kiers suggestes),但它是一种更快的算法,因为旋转卡尺与我在此处描述的基本相同,但随后旋转矩形,直到它的一个边缘与最小/最大点中的 2 个对齐。

关于optimization - 最佳固定矩形区域适合点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5718553/

相关文章:

java - 处理:几个圆圈互相对合+变色

c++ - 如何计算 2D 和 3D 空间中多边形的中心

c++ - 找出一个点位于沿对角线分割的矩形内的哪个扇区

java - 如何从第三方库中删除绒毛?

处理复杂二维几何的javascript库

geometry - 求两个整数二次贝塞尔曲线相交的快速方法?

python - 缩短用于测试 Python 返回值的常用代码段

c++ - 获取文件大小信息的更快方法 C++

mysql - 如何通过标签搜索数十亿个项目(寻找最佳架构)?

c# - 如何在 C# 中多次使用秒表?