找一个触及3个其他人的圈子

时间:2015-05-22 13:41:06

标签: geometry

我们有一个半径为10的红色圆圈。在这个红色的圆柱上,还有另外3个蓝色(半径8)的圆圈,它们间隔120°。 C点是两个蓝色圆圈的中间,有一个绿色圆圈(半径2)。

我需要找到同时接触两个蓝色圆圈和绿色的黄色圆圈的坐标和半径。我知道如何制作一个有3个点的圆圈但黄色圆圈只能触及其他3个圆圈。每个圆圈只有1个点交叉点。

在图片上,我们可以看到它不正确。黄色圆圈触摸2点蓝色圆圈。

在示例中有3个蓝色圆圈,但它应该与红色圆圈上等距的2,3,4和5个蓝色圆圈一起使用。

我现在已经解决了这个问题,帮助......

我尝试为iPhone做这件事,但欢迎使用任何代码。

http://i.stack.imgur.com/JwO8L.png

2 个答案:

答案 0 :(得分:0)

如果你有他们的位置和半径值,我认为这很简单。 您可以比较黄色圆圈和目标圆圈之间的距离是否与所需的值匹配:

要找到两点(1和2)之间的距离,我们将使用等式d=sqrt((x2-x1)^2+(y2-y1)^2)

但是我们必须考虑它们的半径,所以我们只需要比较考虑到目标圆的半径,黄色圆圈边缘上的点之间的距离是否在目标圆内。半径。

iOS提供these个数学函数,因此我们可以将上面的等式变成这样的:

- (BOOL)yellowCircleCrossesTargetCircleWithCenter:(CGPoint)center andRadius:(CGFloat)radius {
    //consider x, y, r and the like, like real numbers.
    //this is just an example

    CGPoint yellowCircle = CGPointMake(x,y);
    CGFloat yellowCircleRadius = r;
    CGPoint targetCircle = center
    CGFloat targetCircleRadius = radius;

    double distance = sqrt(pow(targtetCircle.x-yellowCircle.x)+pow(targetCircle.y-yellowCircle.y));

    BOOL isAboveMinimumLimit = (yellowCircleRadius - targetCircleRadius) < distance;
    BOOL isBelowMaximumLimit = (yellowCircleRadius + targetCircleRadius) > distance;

    return isAboveMinimumLimit && isBelowMaximumLimit;
        //returns YES if yellow circle's border crosses the target circle
}

您必须为要检查的每个圈子运行此操作。如果所有圆圈都返回YES,则黄色将全部交叉。

答案 1 :(得分:0)

让我们

blue radius = R
green radius = r
unknown yellow radius is F
and |BC| = P

然后| GB | = R + F,因为半径到触点垂直于公切线,所以它们是共线的,对于直角BGC三角形

(R + F)^2 = (r + F)^2 + P^2(由于毕达哥拉斯定理)

R^2 + 2*R*F+F^2 = r^2 + 2*r*F + F^2 + P^2
2F*(R-r) = P^2 + r^2 -R^2
and finally
F = (P^2 + r^2 -R^2) / (2*(R-r))

适用于您的案例R = 8, r = 2, P = 10*Sin(Pi/3)=5 *Sqrt(3), P^2 = 75

F = (75 + 4 - 64) / (2 * (8 - 2)) = 15/12 = 5/4

草图(另一个点名称): enter image description here