给定三个圆的中心点和半径,如何定义相交区域?

到目前为止,我所拥有的是:

var point1 = {x: -3, y: 0};
var point2 = {x: 3, y: 0};
var point3 = {x: 0, y: -3};

var r1 = 5;
var r2 = 5;
var r3 = 5;

var area = returnIntersectionArea(point1, point2, point3, r1, r2, r3);

同样,如果两个碰撞但不是第三碰撞,则函数应返回null。
如果没有冲突,则应返回null。

最佳答案

This article描述了如何找到两个圆之间的交点区域。结果很容易扩展到三个圆圈。

- - - - - - -编辑 - - - - - - -
好的,这个问题不容易扩展到三个圈子,我发现了关于该主题的博士学位论文。假定三个圆相交如下所示,可以找到一个近似解(我认为)。在尝试之前,我们必须检查三个圆是否确实相交,如下所示。如果说一个圆圈在另一个圆圈内,而第三个圆圈将它们都相交,则问题会发生很大变化。



令S1,S2和S3表示三个圆的面积,并且X1,X2和X3表示每对圆之间的交点的面积(索引沿顺时针方向增加)。正如我们已经确定的那样,有确切的公式。考虑以下线性方程组:

A + D + F + G = A + D + X1 = S1

B + D + E + G = B + D + X3 = S2

B + E + D + G = B + E + X2 = S3

它是不确定的,但是可以使用最小二乘法找到近似解。我还没有尝试过数字,但是我会尽快回复您:D
如果最小二乘解似乎是错误的,我们还应该施加一些约束,例如如果任何一对圆之间的交点小于圆的面积,则为面积。
评论被赞赏。

PS +1给西蒙(Simon)指出我不应该认为事情简单

10-06 04:47