
Il est nécessaire de faire un travail mathématique avant toute chose.
\begin{align*}
x^2+y^2+ax+by+c=0
& \iff (x^2 + ax) + (y^2 + by) + c =0\\
& \iff \left[\left(x + \frac{a}{2}\right)^2-\left(\frac{a}{2}\right)^2\right] + \left[\left(y + \frac{b}{2}\right)^2-\left(\frac{b}{2}\right)^2\right] + c = 0\\
& \iff \left(x + \frac{a}{2}\right)^2 + \left(y + \frac{b}{2}\right)^2 = \left(\frac{a}{2}\right)^2 + \left(\frac{b}{2}\right)^2 - c
\end{align*}

On a ainsi une équation de la forme:
\[
(x-x_C)^2 + (x-y_C)^2 = r^2
\]
avec:
\[
x_C = -\frac{a}{2},\qquad
y_C = -\frac{b}{2}\]
et
\[
r=\sqrt{\left(\frac{a}{2}\right)^2 + \left(\frac{b}{2}\right)^2 - c}\quad\text{si }\left(\frac{a}{2}\right)^2 + \left(\frac{b}{2}\right)^2 - c\geqslant0.
\]
Ceci nous donne alors les coordonnées du centre $C$ du cercle, ainsi que son éventuel rayon $r$.

D'où la fonction Python suivante:

\begin{python}
def centre_rayon( cercle ):
    xC = -cercle[0] / 2 # correspond à '-a/2'
    yC = -cercle[1] / 2 # correspond à '-b/2'

    R = xC**2 + yC**2 - cercle[2] # correspond à (a/2)^2 + (b/2)^2 - c

    if R >= 0:
        r = R**0.5 # racine carrée de R
        return (xC, yC) , r
    else:
        return "Ce n'est pas une équation cartésienne de cercle."
\end{python}

Testons en mode console:

\begin{console}
>>> centre_rayon( (-1,2,-8) )
((0.5, -1.0), 3.0413812651491097)
\end{console}

Ceci nous indique que si on considère le cercle d'équation $x^2+y^2-x+2y-8=0$, son centre a pour coordonnées \coord{\frac{1}{2}}{-1} et pour rayon $r\approx3,04$.

\bigskip

Pour éviter d'avoir à écrire une double paire de parenthèses lors de l'appel à la fonction \texttt{centre\_rayon}, on pourrait ajouter une astérisque devant l'argument de la fonction et écrire:
\begin{python}
def centre_rayon( *cercle ):
    xC = -cercle[0] / 2 # correspond à '-a/2'
    yC = -cercle[1] / 2 # correspond à '-b/2'

    R = xC**2 + yC**2 - cercle[2] # correspond à (a/2)^2 + (b/2)^2 - c

    if R >= 0:
        r = R**0.5 # racine carrée de R
        return (xC, yC) , r
    else:
        return "Ce n'est pas une équation cartésienne de cercle."
\end{python}
Ainsi, on n'aurait plus qu'à écrire :
\begin{console}
>>> centre_rayon(-1,2,-8)
((0.5, -1.0), 3.0413812651491097)
\end{console}
Mais cela dépasse largement les capacités attendues en mathématiques concernant Python.
