Algorithm 如何在平面中找到点

Algorithm 如何在平面中找到点,algorithm,computational-geometry,nearest-neighbor,Algorithm,Computational Geometry,Nearest Neighbor,我有一些已知的r=1的圆(下图,4个圆称为C1到C4)。我想找到离(0,0)最近的点,不在圆内。有多项式算法吗 您可以为圆内的每个点找到从点(0,0)开始的长度,然后找到不在圆内的最小邻域。距离原点最近的点将是以下之一: 两圆相交 圆与连接该圆心与原点的直线的交点 原点本身,如果它不在任何圆圈内 如果圆心位于原点,则圆上有无穷多个点 检查所有这些点,并找到其中最接近的点,条件是该点不位于某个圆内 这将给您带来复杂性O(n^3)。这不是一个完全可以随时使用的答案,只是一个供您遵循的草稿(请让我

我有一些已知的r=1的圆(下图,4个圆称为C1到C4)。我想找到离(0,0)最近的点,不在圆内。有多项式算法吗


您可以为圆内的每个点找到从点(0,0)开始的长度,然后找到不在圆内的最小邻域。

距离原点最近的点将是以下之一:

  • 两圆相交

  • 圆与连接该圆心与原点的直线的交点

  • 原点本身,如果它不在任何圆圈内

  • 如果圆心位于原点,则圆上有无穷多个点

检查所有这些点,并找到其中最接近的点,条件是该点不位于某个圆内


这将给您带来复杂性O(n^3)。

这不是一个完全可以随时使用的答案,只是一个供您遵循的草稿(请让我们知道您下次尝试了什么)

  • 如果(0,0)未被任何圆覆盖,则答案为(0,0)

  • 如果(0,0)被一个或多个圆覆盖:

    (1) 这些圆上未被任何圆覆盖的最近点(可通过将圆心连接并延伸至(0,0)来计算)应为候选点

    (2) 所有未被任何圆覆盖的圆的交叉点应为候选点

    (3) 如果(0,0)是一个或多个圆的中心,请检查这些圆是否完全被其他圆覆盖。如果没有,则将这些圆圈上任何一个未被任何其他圆圈覆盖的点添加到候选点

  • 在候选人中找出最低要求


  • 所需点位于以原点为中心的所有圆的并集的边界上,最大内接于某个输入圆Cn

    算法:

    对于半径r_i以O_i为中心的每个输入圆C_i(其中O_i距离原点d_i,Oi_1^2+Oi_2^2=d_i^2),计算内接半径u_i=r_i-d_i,并找到它们的最大值。距离原点的某个点u_max就是解决方案


    为了找到实际点,假设某些i的u_i=u_max。那么你想要的是-O_i*u_i/d_i。如果d_i=0,那么任何远离原点的点r_i都有效。

    当然有。你试过什么?我的第一个想法是最近的点要么是原点,要么是其中一个圆上离原点最近的点,要么是两个圆的交点。你可以明确地检查这些点中的每一点,看哪一点最接近,但不在另一个圆内。你能给出一个例子和想要的答案吗?圆算吗?我已经在这里添加了示例的解决方案。最好在这里询问没有这样的点。我想找到它。我无法用暴力来寻找所有可能的解决办法