我得到了许多半径为1的圆,需要找到所有这些圆的半径内包含的点(或者更可能是许多点的平均值)。是否有算法可以做到这一点,而不必暴力破解它?
评论我在下面添加了更多指示我的问题:
"添加一点特异性:我试图找到一个点(或者非常接近它的某个点,至少在.05单位精度内)。给我找到这一点的唯一信息是一组约50个点,所有这些都在我神秘点的一定误差范围内(在这个例子中是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]
}
}