Follows a MATHEMATICA script which calculates an equilateral triangle obtained by inversion, (red) preferably when the common point to invert, (red) is located inside the original triangle (blue). There are problems of poor numerical conditioning in case of squashed triangles. Changing the value of SeedRandom[15]
we can generate other base triangles.
Clear[circ]
circ[p_, p0_, r_] := (p - p0) . (p - p0) - r^2
Clear[solvecirc]
solvecirc[p1_, p2_, g_] := Module[{p0, x0, y0, equ1, equ2, equ3, sols, r0, ind, r},
p0 = {x0, y0};
equ1 = circ[p1, p0, r];
equ2 = circ[p2, p0, r];
equ3 = circ[g, p0, r];
sols = Quiet@NSolve[{equ1 == 0, equ2 == 0, equ3 == 0}, {x0, y0, r}][[2]];
Return[{p0, Abs[r]} /. sols];
]
Clear[extcirc]
extcirc[tri_, g_] := Module[{p1 = tri[[1]], p2 = tri[[2]], p3 = tri[[3]], sol1, sol2, sol3},
sol3 = solvecirc[p1, p2, g];
sol1 = solvecirc[p2, p3, g];
sol2 = solvecirc[p3, p1, g];
Return[{sol1, sol2, sol3}]
]
Clear[invert]
invert[g_, p0_, r_] := Module[{d},
d = Norm[g - p0];
Return[p0 + (g - p0) (r/d)^2]
]
Clear[equilat]
equilat[tri_, g_] := Module[{circs, invs, l1, l2, l3},
circs = extcirc[tri, g];
invs = Table[invert[tri[[k]], circs[[k, 1]], circs[[k, 2]]], {k, 1, 3}];
l1 = (invs[[1]] - invs[[2]]).(invs[[1]] - invs[[2]]);
l2 = (invs[[2]] - invs[[3]]).(invs[[2]] - invs[[3]]);
l3 = (invs[[1]] - invs[[3]]).(invs[[1]] - invs[[3]]);
Return[(l1 - l2)^2 + (l2 - l3)^2 + (l1 - l3)^2]
]
SeedRandom[15];
toler = 0.0001;
tri = RandomReal[{-1, 1}, {3, 2}];
regs = BoundaryDiscretizeGraphics[ListLinePlot[Join[tri, {tri[[1]]}]]];
sol = Quiet@NMinimize[{equilat[tri, {x, y}], {x, y} [Element] regs}, {x, y}, Method -> "DifferentialEvolution"]
If[sol[[1]] > toler,
sol = Quiet@NMinimize[equilat[tri, {x, y}], {x, y}, Method -> "DifferentialEvolution"]
]
GRF = {};
If[sol[[1]] < toler,
g = {x, y} /. sol[[2]];
circs = extcirc[tri, g];
invs = Table[invert[tri[[k]], circs[[k, 1]], circs[[k, 2]]], {k, 1, 3}];
gr1 = ListLinePlot[Join[tri, {tri[[1]]}], PlotStyle -> Blue];
AppendTo[GRF, gr1];
gr2 = Graphics[{Red, PointSize[0.01], Point[g]}];
AppendTo[GRF, gr2];
gr4 = ListLinePlot[Join[invs, {invs[[1]]}], PlotStyle -> Red];
AppendTo[GRF, gr4];
gr5 = Table[Graphics[{Dashed, Circle[circs[[k, 1]], circs[[k, 2]]]}], {k, 1, 3}];
AppendTo[GRF, gr5];
Show[GRF, PlotRange -> {{-2, 2}, {-2, 2}}, AspectRatio -> 1],
Print["Out of tolerance"]
]

NOTE
Added some code simplifications regarding the method equilat[tri_, g_]
EDIT
Analyzing the excellent answer from @intelligenti pauca, and using the same formalism used in my previous answer, we developed a formal (algebraic) formulation which works quite well. For simplicity, the initial triangle has coordinates
$$
(0,0),(0,3),(n_x,n_y)
$$
where $n_x, n_y$ are random integers in the range $(0,10)$. According to the results, we can obtain four or six solutions. Follows the script which reuses the methods already defined previously
circ[p_, p0_, r_] := (p - p0) . (p - p0) - r^2
solvecirc[p1_, p2_, g_] := Module[{p0, x0, y0, sols, r0, r},
p0 = {x0, y0};
sols = Solve[{circ[p1, p0, r] == 0, circ[p2, p0, r] == 0,
circ[g, p0, r] == 0}, {x0, y0, r}][[2]];
Return[{p0, r^2} /. sols // Simplify]
]
invert[g_, p0_, r2_] := p0 + (g - p0) r2/(g - p0) . (g - p0)
g = {gx, gy};
{p12, r12} = solvecirc[{x1, y1}, {x2, y2}, g] // Simplify;
{p23, r23} = solvecirc[{x2, y2}, {x3, y3}, g] // Simplify;
{p31, r31} = solvecirc[{x3, y3}, {x1, y1}, g] // Simplify;
p1 = invert[{x1, y1}, p23, r23];
p2 = invert[{x2, y2}, p31, r31];
p3 = invert[{x3, y3}, p12, r12];
equ1 = (p1 - p2) . (p1 - p2) - (p2 - p3) . (p2 - p3);
equ2 = (p2 - p3) . (p2 - p3) - (p3 - p1) . (p3 - p1);
equ3 = (p3 - p1) . (p3 - p1) - (p1 - p2) . (p1 - p2);
SeedRandom[1];
parms = {x1 -> 0, y1 -> 0, x2 -> 3, y2 -> 0,
x3 -> RandomInteger[{0, 10}], y3 -> RandomInteger[{0, 10 ]}
equs = {equ1, equ3} /. parms;
solsg = Solve[equs == 0, g, Reals] // N
circs = {{p12, r12}, {p23, r23}, {p31, r31}} /. parms /. solsg // N;
points = {p1, p2, p3} /. parms /. solsg;
gs = {gx, gy} /. solsg;
gr1 = ListLinePlot[{{x1, y1}, {x2, y2}, {x3, y3}, {x1, y1}} /. parms, PlotStyle -> Blue];
gr2 = Table[ListLinePlot[Join[points[[k]], {points[[k, 1]]}], PlotStyle -> Red], {k, 1, Length[points]}];
gr3 = Graphics[{Red, PointSize[0.01], Point[gs]}];
Show[gr1, gr2, gr3, PlotRange -> All, AspectRatio -> 1, Axes -> False]
Follows a case with SeedRandom[1]
which gives six solutions

and other with SeedRandom[2]
which gives four solutions
