Costruiamo dei quadrati sui lati di un triangolo. 
Il segmento che unisce uno dei vertici del triangolo 
con il centro del quadrato ad esso opposto è 
isometrico e perpendicolare al segmento che unisce 
i centri degli altri due quadrati.

A = (-4.5449109327871415, -2.276224644866316)
B = (-5.5199096074939735, -5.143867805768762)
C = (-0.9685276384754942, -5.24648613968062)
poly1, c, a, b = Polygon(A, B, C)
d = OrthogonalLine(A, b)
e = OrthogonalLine(C, b)
f = Circle(A, C)
D = Intersect(f, d, 1)
g = OrthogonalLine(D, d)
E = Intersect(e, g)
h = OrthogonalLine(B, a)
i = OrthogonalLine(C, a)
k = Circle(B, C)
F = Intersect(k, h, 1)
j = OrthogonalLine(F, h)
G = Intersect(i, j)
l = OrthogonalLine(B, c)
m = OrthogonalLine(A, c)
p = Circle(A, B)
H = Intersect(p, m, 1)
n = OrthogonalLine(H, m)
I = Intersect(l, n)
poly2, a_1, c_1, e_1, d_1 = Polygon(A, C, E, D)
poly3, a_2, h_1, i_1, b_1 = Polygon(A, H, I, B)
poly4, b_2, f_1, g_1, c_2 = Polygon(B, F, G, C)
J = Midpoint(H, B)
K = Midpoint(D, C)
L = Midpoint(C, F)
q = Segment(J, C)
r = Segment(K, L)
distanzaJC = Distance(J, C)
TestoJC: "\overline{" + (Name[J]) + (Name[C]) + "} \, = \, " + distanzaJC
distanzaKL = Distance(K, L)
TestoKL: "\overline{" + (Name[K]) + (Name[L]) + "} \, = \, " + distanzaKL
M = Intersect(q, r)
s = Segment(A, L)
t = Segment(J, K)
N = Intersect(s, t)
j_1 = Segment(B, K)
k_1 = Segment(J, L)
O = Intersect(j_1, k_1)
distanzaJK = Distance(J, K)
TestoJK: "\overline{" + (Name[J]) + (Name[K]) + "} \, = \, " + distanzaJK
distanzaLA = Distance(L, A)
TestoLA: "\overline{" + (Name[L]) + (Name[A]) + "} \, = \, " + distanzaLA
distanzaBK = Distance(B, K)
TestoBK: "\overline{" + (Name[B]) + (Name[K]) + "} \, = \, " + distanzaBK
distanzaJL = Distance(J, L)
TestoJL: "\overline{" + (Name[J]) + (Name[L]) + "} \, = \, " + distanzaJL
α = Angle(J, N, L)
β = Angle(L, O, K)
γ = Angle(J, M, L)

Tool: Circocerchio
Clicca sul triangolo
Input: poly1
Output: p, T

A = (-1.9867180309718853, 3.399206189848298)
B = (-3.080683477006394, 1.9442321466224008)
C = (-0.6192612234287485, 1.9004735287810202)
poly1, c, a, b = Polygon(A, B, C)
j = LineBisector(a)
l = LineBisector(c)
T = Intersect(j, l)
p = Circle(T, B)

Tool: Circonferenza inscrita (command Circonferenzainscrita)
Clicca sui vertici del triangolo
Input: N, P, Q
Output: c_1, R

poly2, q_1, n_1, p_1 = Polygon(N, P, Q)
r = AngularBisector(N, Q, P)
s = AngularBisector(P, N, Q)
R = Intersect(r, s)
t = OrthogonalLine(R, p_1)
S = Intersect(t, p_1)
c_1 = Circle(R, S)

Tool: Ortocentro
Clicca sui vertici del triangolo
Input: E_1, F_1, G_1
Output: H_1

j_1 = Line(F_1, G_1)
l_1 = Line(G_1, E_1)
m_1 = OrthogonalLine(F_1, l_1)
n_1 = OrthogonalLine(E_1, j_1)
H_1 = Intersect(m_1, n_1)

Tool: Excerchi
Clicca su 3 rette che determinano un triangolo
Input: b, c, a
Output: p, E, D, F, q, r

d, e = AngularBisector(a, c)
f, g = AngularBisector(b, c)
h, i = AngularBisector(a, b)
D = Intersect(h, d)
E = Intersect(d, f)
F = Intersect(f, h)
j = OrthogonalLine(D, a)
k = OrthogonalLine(E, c)
l = OrthogonalLine(F, b)
G = Intersect(b, l)
H = Intersect(k, c)
I = Intersect(j, a)
p = Circle(E, H)
q = Circle(F, G)
r = Circle(D, I)

Tool: Tr. Equil. su lato (command Treqlato)
Clicca sugli estremi in verso orario
Input: A, C
Output: poly2, a_1, c_1, D, d_1

d = Circle(C, A)
e = Circle(A, C)
D = Intersect(d, e, 2)
poly2, c_1, a_1, d_1 = Polygon(A, D, C)