/* ===================================================== ===============*/<Br/> | returns the smallest covering circle. <br/> | call: minimum Circle = minc (point * P, int N ); <br/>/* ======================================== =====================*/<br/> struct point {Double X, Y ;}; <br/> struct circle {point C; Double R ;}; <br/> double dist (point a, point B) {<br/> return SQRT (. x-b.x) * (. x-b.x) +. y-b.y) * (. y-b.y); <br/>}< br/> circle calc (point P1, point P2, point P3) {<br/> circle temp; <br/> double, b, c, d, e, f; <br/> A = p2.x-p1.x; <br/> B = p2.y-p1.y; <br/> C = (p2.x * p2.x + p2.y * p2.y-p1.x * p1.x-p1.y * p1.y)/2; <br/> d = p3.x-p1.x; <br/> E = p3.y-p1.y; <br/> F = (p3.x * p3.x + p3.y * p3.y-p1.x * p1.x-p1.y * p1.y)/2; <br/> temp. c. y = (C * D-f * A)/(B * D-E * A); <br/> temp. c. X = (C * e-f * B)/(A * E-B * D); <br/> return temp; <br/>}< br/> circle minc (point * P, int N) {<br/> circle O; <br/> int I, J, K; <br/> O. C = P [0]; O. r = 0; <br/> for (I = 1; I <n; I ++) {<br/> If (Dist (O. c, p [I]) <= O. R + 1e-6) continue; <br/> O. C = P [I]; O. r = 0; <br/> for (j = 0; j <I; j ++) {<br/> If (Dist (O. c, p [J]) <= O. R + 1e-6) continue; <br/> O. c. X = (P [I]. X + P [J]. x)/2; O. c. y = (P [I]. Y + P [J]. y)/2; O. R = dist (O. c, p [J]); <br/> for (k = 0; k <j; k ++) {<br/> If (Dist (O. c, p [k]) <= O. R + 1e-6) continue; <br/> O = calc (P [I], p [J], p [k]); <br/> O. R = dist (O. c, p [k]); <br/>}< br/> return O; <br/>}