How about that:
-- Byteemoz
SuperStrict Function CircleFromPoints(p1x#, p1y#, p2x#, p2y#, p3x#, p3y#, cx# Var, cy# Var, rad# Var) Local A#, B#, C#, D#, E#, F#, G# A = p2x - p1x B = p2y - p1y C = p3x - p1x D = p3y - p1y E = A * (p1x + p2x) + B * (p1y + p2y) F = C * (p1x + p3x) + D * (p1y + p3y) G = 2 * (A * (p3y - p2y) - B * (p3x - p2x)) If G = 0 Then cx = 0.0 cy = 0.0 rad = 0.0 Else cx = (D * E - B * F) / G cy = (A * F - C * E) / G rad = Sqr((p1x - cx) ^ 2 + (p1y - cy) ^ 2) EndIf EndFunction ' a test AppTitle = "LMB = point1 ; MMB = point2 ; RMB = point3" Graphics 800, 600 Local p1x# = 400, p1y# = 250, p2x# = 350, p2y# = 350, p3x# = 450, p3y# = 350, cx#, cy#, rad# Repeat WaitEvent If MouseHit(MOUSE_LEFT) Then p1x = MouseX() ; p1y = MouseY() If MouseHit(MOUSE_MIDDLE) Then p2x = MouseX() ; p2y = MouseY() If MouseHit(MOUSE_RIGHT) Then p3x = MouseX() ; p3y = MouseY() CircleFromPoints p1x, p1y, p2x, p2y, p3x, p3y, cx, cy, rad Cls SetColor 255, 255, 255 DrawOval cx - rad, cy - rad, rad * 2, rad * 2 SetColor 0, 64, 0 DrawOval cx - 1, cy - 1, 3, 3 SetColor 255, 0, 0 DrawRect p1x - 1, p1y - 1, 3, 3 DrawRect p2x - 1, p2y - 1, 3, 3 DrawRect p3x - 1, p3y - 1, 3, 3 Flip Until KeyHit(KEY_ESCAPE) Or AppTerminate()( from http://cgafaq.info/wiki/Circle_Through_Three_Points )
-- Byteemoz