在多个圆的半径范围内找到点的算法?

时间:2016-09-20 06:28:36

标签: algorithm

我得到了许多半径为1的圆,需要找到所有这些圆的半径内包含的点(或者更可能是许多点的平均值)。是否有算法可以做到这一点,而不必暴力破解它?

评论我在下面添加了更多指示我的问题:

"添加一点特异性:我试图找到一个点(或者非常接近它的某个点,至少在.05单位精度内)。给我找到这一点的唯一信息是一组约50个点,所有这些都在我神秘点的一定误差范围内(在这个例子中是1个单位)。因此,我想要找到的点是在给予我的所有圆圈的半径范围内。我正在寻找一种算法,除了暴力迫使大量的随机点,直到1适合所有条件。对不起,如果我的问题非常模糊,那就是一个抽象的问题,很难解释。"

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是针对此问题的O(n ^ 3)时间复杂度解决方案

其中,n =圆圈数

至少有一个圆圈交叉点将是一个很好的答案。

查找所有圈子之间的所有可能的交集。现在在这些交叉点中找到一个交叉点,它位于所有其他圆圈内。

这是一个简单的伪代码:

vector<Point> points;
vector<Circles> circs;    
for(i=0;i<circs.size();i++) {
for(j=i+1;j<circs.size();j++) {
    points.push_back(find_intersection(circs[i],circs[j]));
    //here you will find at most 2 intersections push both in this list
}

for(i=0;i<points.size();i++) {
    int cicrs_covered = 0;
    for(j=0;j<circs.size();j++) {
        if(is_point_inside_circle(points[i],circs[j])) {
            cicrs_covered++;
        }
    }
    if(cicrs_covered == circs.size()) {
        //answer is points[i]
    }
}