I thought I'd show you how to approach this in Mathematica. Although not the easiest thing to encode, it has flexibility. Also keep in mind that the author is rather inappropriate when it comes to graphics, so it can be simpler and / or more effective ways.
offset[pt_, center_, eps_] := center + (1 + eps)*(pt - center); pointfunc[{pt_List, center_List, ptname_String}, siz_, eps_] := {PointSize[siz], Point[pt], Inset[ptname, offset[pt, center, eps]]}; Manipulate[Module[ {plot1, plot2, plot3, siz = .02, ab = bb - aa, bc = cc - bb, ac = cc - aa, cen = (aa + bb)/2., x, y, soln, dd, mm, ff, lens, pts, eps = .15}, plot1 = ListLinePlot[{aa, bb, cc, aa}]; plot2 = Graphics[Circle[cen, Norm[ab]/2.]]; soln = NSolve[{Norm[ac]*({x, y} - aa).ab - Norm[ab]*({x, y} - aa).ac == 0, ({x, y} - cc).({-1, 1}*Reverse[bc]) == 0}, {x, y}]; dd = {x, y} /. soln[[1]]; mm = (dd + aa)/2; soln = NSolve[{({x, y} - cen).({x, y} - cen) - ab.ab/4 == 0, ({x, y} - cc).({-1, 1}*Reverse[mm - cc]) == 0}, {x, y}]; ff = {x, y} /. soln; lens = Map[Norm[# - cc] &, ff]; ff = If[OrderedQ[lens], ff[[1]], ff[[2]]]; pts = {{aa, cen, "A"}, {bb, cen, "B"}, {cc, cen, "C"}, {dd, cen, "D"}, {ff, cen, "F"}, {mm, cen, "M"}, {cen, ff, "O"}}; pts = Map[pointfunc[#, siz, eps] &, pts]; plot3 = Graphics[Join[pts, {Line[{aa, dd}], Line[{cc, mm}]}]]; Show[plot1, plot2, plot3, PlotRange -> {{-.2, 1.1}, {-.2, 1.2}}, AspectRatio -> Full, Axes -> False]], {{aa, {0, 0}}, {0, 0}, {1, 1}, Locator}, {{bb, {.8, .7}}, {0, 0}, {1, 1}, Locator}, {{cc, {.1, 1}}, {0, 0}, {1, 1}, Locator}, TrackedSymbols :> None]
Here is a screenshot.

Daniel Lichtblow Wolfram Research