Не совсем ответ, я показываю здесь альтернативный метод.
Пусть p
, q
, r
будут тремя точками.Мы переводим их так, чтобы p
дошло до источника.В векторе, q-= p
, r-= p
.
Теперь уравнение точки по началу координат равно
2.xc.x + 2.yc.y = x² + y²
, где xc
, yc
- координаты центра.
Подставляя координаты p
, q
, мы получаем систему 2x2
xc.xp + yc.yp = xp² + yp²
xc.xq + yc.yq = xq² + yq²
Код, который реализует это, приведен ниже
# Translate to the origin
xq-= xp
yq-= yp
q2= xp * xp + yp * yp
xr-= xq
yr-= yq
r2= xr * xr + yr * yr
# Solve for the center coordinates
d= 2 * (xp * yq - xq * yp)
xc= (p2 * yq - q2 * yp) / d
yc= (p2 * xp - q2 * xq) / d
# Radius
r= math.sqrt(xc * xc + yc * yc)
# Untranslate
xc+= xp
yc+= yp