Questa decomposizione è corretta solo per triangoli i cui lati stanno nel rapporto 3:4:5.

A = (-20.778144903572393, 9.339594265976352)
B_1 = (-7.152091986209113, 9.258966733920948)
a = Line(A, B_1)
b = OrthogonalLine(A, a)
C_1 = Point(a)
A' = Mirror(A, C_1)
C = Mirror(C_1, A')
c = Circle(A, C_1)
D = Intersect(c, b, 2)
A'_1 = Mirror(A, D)
C_2 = Mirror(D, A'_1)
k = Circle(A, C_2)
B = Mirror(A'_1, C_2)
d = Circle(A, B)
e = OrthogonalLine(C, a)
E = Intersect(d, a, 1)
f = OrthogonalLine(E, a)
F = Intersect(k, b, 2)
g = OrthogonalLine(F, e)
G = Intersect(e, g)
h = OrthogonalLine(B, b)
H = Intersect(f, h)
poly1, a_1, b_1, c_1 = Polygon(B, C, A)
i = OrthogonalLine(B, a_1)
j = OrthogonalLine(C, a_1)
p = Circle(C, B)
I = Intersect(p, j, 2)
l = OrthogonalLine(I, j)
J = Intersect(i, l)
K = Midpoint(E, A)
distanzaKA = Distance(K, A)
TestoKA: "\overline{" + (Name[K]) + (Name[A]) + "} \, = \, " + distanzaKA
q = Circle(C, distanzaKA)
L = Intersect(q, a_1, 1)
m = OrthogonalLine(L, a_1)
distanzaBA = Distance(B, A)
TestoBA: "\overline{" + (Name[B]) + (Name[A]) + "} \, = \, " + distanzaBA
r = Circle(C, distanzaBA)
M = Intersect(r, j, 2)
n = OrthogonalLine(M, j)
N = Intersect(m, n)
O = Intersect(l, m)
s = OrthogonalLine(K, h)
P = Intersect(h, s)
poly2, k_1, a_2, b_2, p_1 = Polygon(K, A, B, P)
poly3, c_2, m_1, n_1, l_1 = Polygon(C, M, N, L)
poly4, n_2, o, i_1, m_2 = Polygon(N, O, I, M)
distanzaMI = Distance(M, I)
TestoMI: "\overline{" + (Name[M]) + (Name[I]) + "} \, = \, " + distanzaMI
t = Circle(E, distanzaMI)
Testopoly2: "Area " + (Name[K]) + (Name[A]) + (Name[B]) + (Name[P]) + " = " + poly2
Testopoly3: "Area " + (Name[C]) + (Name[M]) + (Name[N]) + (Name[L]) + " = " + poly3
Testopoly4: "Area " + (Name[N]) + (Name[O]) + (Name[I]) + (Name[M]) + " = " + poly4
Q = Intersect(t, f, 2)
d_1 = OrthogonalLine(Q, f)
R = Intersect(p_1, d_1)
poly5, r_1, k_2, e_1, q_1 = Polygon(R, K, E, Q)
Testopoly5: "Area " + (Name[R]) + (Name[K]) + (Name[E]) + (Name[Q]) + " = " + poly5
poly6, a_3, f_1, g_1, c_3 = Polygon(A, F, G, C)
Testopoly6: "Area " + (Name[A]) + (Name[F]) + (Name[G]) + (Name[C]) + " = " + poly6
poly7, h_1, p_2, r_2, q_2 = Polygon(H, P, R, Q)
s_1 = Circle(B, L)
S = Intersect(s_1, i, 2)
j_1 = OrthogonalLine(S, i)
T = Intersect(j_1, n_1)
poly8, s_2, t_1, l_2, b_3 = Polygon(S, T, L, B)
poly9, j_2, o_1, t_2, s_3 = Polygon(J, O, T, S)
Testopoly9: "Area " + (Name[J]) + (Name[O]) + (Name[T]) + (Name[S]) + " = " + poly9
Testopoly7: "Area " + (Name[H]) + (Name[P]) + (Name[R]) + (Name[Q]) + " = " + poly7
Testopoly8: "Area " + (Name[S]) + (Name[T]) + (Name[L]) + (Name[B]) + " = " + poly8

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)