#include<bits/stdc++.h> #define ll long long // input: 3 points in circle. // output: center and radius of circle. // require: 3 points not in a line. pair<pair<double, double>, double> get_center_and_radius(double x1, double y1, double x2, double y2, double x3, double y3) { // make sure (y1 != y2 && y1 != y3) if (!(y1 != y2 && y1 != y3)) { double t1, t2; t1 = x1, t2 = y1; x1 = x2, y1 = y2; x2 = t1, y2 = t2; if (!(y1 != y2 && y1 != y3)) { double t1, t2; t1 = x1, t2 = y1; x1 = x3, y1 = y3; x3 = t1, y3 = t2; } } double u = 2.*x1 - 2.*x2; double v = x2*x2 + y2*y2 - x1*x1 - y1*y1; double w = 2.*y2 - 2.*y1; double e = 2.*x1 - 2.*x3; double f = x3*x3 + y3*y3 - x1*x1 - y1*y1; double g = 2.*y3 - 2.*y1; double a = (f*w - v*g) / (u*g - e*w); double b = (x2*x2 + y2*y2 + 2.*a*x1 - x1*x1 - y1*y1 - 2.*a*x2) / (2.*y2 - 2.*y1); double c = - (x1*x1 + y1*y1 - 2.*a*x1 - 2.*b*y1); double r = sqrt(a*a + b*b -c); pair<pair<double, double>, double> result = make_pair(make_pair(a, b), r); return result; }