// from https://stackoverflow.com/questions/4103405/what-is-the-algorithm-for-finding-the-center-of-a-circle-from-three-points // (by Adam Gawne-Cain) static DoublePt circleCenterFrom3Points(DoublePt p1, DoublePt p2, DoublePt p3) { double ax = (p1.x + p2.x) / 2; double ay = (p1.y + p2.y) / 2; double ux = (p1.y - p2.y); double uy = (p2.x - p1.x); double bx = (p2.x + p3.x) / 2; double by = (p2.y + p3.y) / 2; double vx = (p2.y - p3.y); double vy = (p3.x - p2.x); double dx = ax - bx; double dy = ay - by; double vu = vx * uy - vy * ux; if (vu == 0) null; // Points are collinear, so no unique solution double g = (dx * uy - dy * ux) / vu; ret DoublePt(bx + g * vx, by + g * vy); }