Distance du centre au centre du premier cercle :
(R + R1)² = (x + a)² + y² ou
R² - x² - y² = 2ax - 2R1R - R1² + a² [1]
Distance au centre du 2ème cercle :
(R - R2)² = x² + (y + h)² ou
R² - x² - y² = 2hy + 2R2R - R2² + h² [2]
Distance au centre du 3ème cercle :
(R + R3)² = (x - b)² + y²
R² - x² - y² = -2bx - 2R3R - R3² + b² [3]
Ces équations sont toutes de la forme : R² - x² - y² = Ax + By + CR
La différence [1] - [3] donne :
2ax - 2R1R - R1² + a² + 2bx + 2R3R + R3² - b² = 0
soit :
2(a + b)x = 2(R1 - R3)R + R1² - R3² + b² - a² [4]
Ou x = PR + Q
avec P = (R1 - R3)/(a + b) et
Q = 0.5 × (R1² - R3² + b² - a²) / (a + b)
La différence [1] - [2] donne :
2ax - 2R1R - R1² + a² - 2hy - 2R2R + R2² - h² = 0
ou
2hy = -2(R1 + R2)R + 2ax - R1² + R2² + a² - h²
En substituant x de [4] dans [5] on obtient y = UR + V avec
U = (aP - R1 - R2) / h et
V = (2aQ - R1² + R2² + a² - h²) / 2h
En substituant alors x et y dans l'équation [2] on obtient une équation du 2nd degré en R :
(R - R2)² = (PR + Q)² + (UR + V + h)²
ou
sR² + 2mR + n = 0 avec
s = P² + U² - 1
m = PQ + U(V + h) + R2
n = Q² + (V + h)² - R2²
En choisisant les cercles différemment, on trouve en général 8 solutions au total.
Celles-ci sont tout simplement obtenues avec les formules précédentes mais tous les signes possibles
pour R1, R2, R3.
Ceci donnerait 16 solutions, il suffit de ne retenir à chaque fois qu'une des deux solutions de l'équation du second degré.
Les calculs précédents échouent si a + b = 0 (cercles 1 et 3 concentriques)
ou si h = 0 (centres alignés).
L'application directe des formules précédentes peut conduire à des résultats faux par manque de précision.
Le présent script ne prend pas en compte ces cas "pathologiques".