我有一些r = 1的已知圆圈(如下图所示,4个圆圈称为C1到C4)。我想找到最近的点(0,0)不在圆圈内。有什么多项式算法吗?
答案 0 :(得分:1)
距离原点最近的点是以下之一:
两个圆圈的交点
连接此圆心与原点的圆和线的交点
原点本身,如果它不在任何圆圈内
如果此圆心位于原点,圆圈上的无限点数
检查所有这些点,找出它们中最接近的点,条件是这个点不在某个圆圈内。
它会给你复杂度O(n ^ 3)。
答案 1 :(得分:1)
这不是一个完全随时可用的答案,但只有一个草稿供您遵循(请告诉我们您下次尝试过的内容)。
如果(0,0)未被任何圆圈覆盖,则答案为(0,0)
如果(0,0)被一个或多个圆圈覆盖:
(1)这些圆圈上的最近点(可以通过将圆心连接并扩展到(0,0)来计算)不是任何圆圈所覆盖的应该是候选者;
(2)这些圆圈的所有交叉点都不是任何圆圈所涵盖的。
(3)如果(0,0)是1个或更多圆圈的中心,请检查这些圆圈是否完全被其他圆圈覆盖。如果没有,请将这些圈子中任何一个未被任何其他圈子覆盖的点添加到候选人中。
在候选人中找到最低要求。
答案 2 :(得分:0)
你可以在圆圈内的每个点找到距离点(0,0)的长度,然后找到一个最小的邻域不在圆圈内。
答案 3 :(得分: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都可以工作。