找到几个圆相交的区域和交叉点的中心点

时间:2015-06-15 12:55:53

标签: math gps geometry

enter image description here

我在室内有3个信号接收器,A,B,C,用于检测客户是否站在上面显示的橙色突出显示区域。

  • A:距离A POINT 7米处检测到,X,Y坐标为12,10
  • B:距离B POINT 5米处检测到,X,Y坐标为5,6
  • C:距离C POINT 3米处检测到,X,Y坐标为8,3

所以,现在我们只有3个圆圈,如果我们有更多分数,那么这个区域会更准确。

问题:如何在上图中找到突出显示的区域坐标,并找到该区域的中心点(图中的绿点)。实际上我正在使用VB.NET,我应该使用什么数学公式?

1 个答案:

答案 0 :(得分:0)

我经常发现获得精确的几何精确答案可能会导致太多的努力。因此,我建议用给定步骤(比如10厘米)的网格对所有区域进行采样。对于每个坐标检查是否在所有圆圈中,如果是,则将该位置放入列表。最后从列表中获得平均排名。

伪代码:

left = min(A.x-A.r, B.x-B.r, C.x-C.r);
top = min(A.y-A.r, B.y-B.r, C.y-C.r);
right = max(A.x+A.r, B.x+B.r, C.x+C.r);
bottom = max(A.y+A.r, B.y+B.r, C.y+C.r);

for (x=left; x<=right; x+=0.1)
    for (y=top; y<=bottom; y+=0.1)
        if (A.inCircle(x,y) && B.inCircle(x,y) && C.inCircle(x,y)) list.add([x,y]);      

return list.getAveragePos();

请注意,只有考虑最小圆圈的网格,才能大大提高速度。