有没有算法只使用极坐标找到附近的点?

时间:2012-02-18 22:50:22

标签: algorithm computational-geometry

假设我有一个点矢量作为极坐标。

假设其中一个点充当探测器,我想找到一定距离内的所有其他点。

是否有算法可以在不将其转换为笛卡尔形式的情况下执行此操作?

2 个答案:

答案 0 :(得分:7)

您正在寻找极坐标的距离。您可以在此link中找到公式。

点(r1,a1)和(r2,a2)之间的距离为:

D = sqrt(r1*r1 + r2*r2 - 2*r1*r2*cos(a1-a2))

答案 1 :(得分:2)

请注意,如果您计划将算法扩展到多个点,则使用空间索引可以更好地探测附近的点。我不知道使用极坐标存在空间索引,我确信它们实现/使用会有点复杂。所以如果你有:

  • 很多要点,
  • 比移动点更频繁地探测,

问问自己是否应该使用笛卡尔坐标和空间索引。

根据您的典型用例自行完成数学运算:

  1. 在极坐标旁边使用笛卡尔坐标:

    • 只有当一个点移动时才会将极性转换为笛卡尔坐标,并且涉及两个三角函数;
    • 找到距离另一个点一定距离的点可以在O(1)时间内完成(取决于平均距离,空间索引的大小,点数......),并且不涉及任何事情除了加/乘之外(甚至不是平方根,你比较距离的平方)。
  2. 仅使用极坐标:

    • 扫描没有空间索引的所有点是O(n);
    • 这涉及每次比较一个三角函数(因此每个探针 n 三次调用)。
  3. 请注意,触发器的计算时间非常昂贵。