我在室内有3个信号接收器,A,B,C,用于检测客户是否站在上面显示的橙色突出显示区域。
所以,现在我们只有3个圆圈,如果我们有更多分数,那么这个区域会更准确。
问题:如何在上图中找到突出显示的区域坐标,并找到该区域的中心点(图中的绿点)。实际上我正在使用VB.NET,我应该使用什么数学公式?
答案 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();
请注意,只有考虑最小圆圈的网格,才能大大提高速度。