struct Point {
double x, y;
} a[max_n];
struct Round {
double r;
Point o;
bool On_Round(Point p) {
return (p.x - o.x) * (p.x - o.x) + (p.y - o.y) * (p.y - o.y) <= r * r;
}
};
Round Make_Round(Point p) {
return {0, p};
}
Round Make_Round(Point u, Point v) {
Point o = {(u.x + v.x) / 2, (u.y + v.y) / 2};
double r = sqrt((u.x - v.x) * (u.x - v.x) + (u.y - v.y) * (u.y - v.y)) / 2;
return {r, o};
}
Round Make_Round(Point u, Point v, Point w) {
double a1 = ((u.x * u.x - v.x * v.x) + (u.y * u.y - v.y * v.y)) / 2;
double a2 = ((u.x * u.x - w.x * w.x) + (u.y * u.y - w.y * w.y)) / 2;
Point o = {0, 0};
o.x = ((u.y - v.y) * a2 - (u.y - w.y) * a1) / ((u.y - v.y) * (u.x - w.x) - (u.x - v.x) * (u.y - w.y));
o.y = ((u.x - w.x) * a1 - (u.x - v.x) * a2) / ((u.y - v.y) * (u.x - w.x) - (u.x - v.x) * (u.y - w.y));
double r = sqrt((u.x - o.x) * (u.x - o.x) + (u.y - o.y) * (u.y - o.y));
return {r, o};
}