有两个圆圈和一个点.如何绕过它

RgS*_*gSW 2 javascript math

我在设计图标时遇到了数学问题,我正在寻找一个JavaScript解决方案.

我拿了2个圆圈,每个圆圈的半径和位置都不同,还有一个点.我想知道包含两个圆圈的最小圆圈并沿着这一点.

在此输入图像描述

红色圆圈是我想知道的圆圈

想要一个像这样的功能:

function calculate(c1x, c1y, c1r, c2x, c2y, c2r, px, py){
    //Calculation
    return {
        x: outX,
        y: outY,
        r: outR
    };
}
Run Code Online (Sandbox Code Playgroud)

MBo*_*MBo 5

有很多退化的情况:一个圆圈在另一个圆圈内,依此类推.

对于最一般的情况 - 大圆触及两个小圆并经过这一点 - 我们需要为三个未知数求解三个方程的系统cx, cy, R:

(px - cx)^2 + (py - cy)^2 = R^2
(cx1 - cx)^2 + (cy1 - cy)^2 = (R-r1)^2
(cx2 - cx)^2 + (cy2 - cy)^2 = (R-r2)^2
Run Code Online (Sandbox Code Playgroud)

您可以尝试用纸和笔来解决它,或者使用一些程序进行符号计算,如Maple,Mathematica,Matlab,MathCad等.

PS略微简化计算,从所有值中减去点坐标,求解系统

cx^2 + cy^2 = R^2
(cx1' - cx)^2 + (cy1' - cy)^2 = (R-r1)^2
(cx2' - cx)^2 + (cy2' - cy)^2 = (R-r2)^2
Run Code Online (Sandbox Code Playgroud)

并将px,py添加到结果中