El grupo de simetría del cuadrado
Author: G4D

Se les llama grupos de Leonardo porque Leonardo Da Vinci los utilizó para añadir capillas y nichos al núcleo central de una iglesia sin alterar su simetría.

Vamos a considerar los movimientos en el plano que podemos realizar a un cuadrado de forma que vuelve a coincidir consigo mismo:La identidad (I): dejar el cuadrado como está. Es un movimiento, aunque no lo parezca. Los matemáticos consideran  que es un movimiento tan importante como lo son el cero para la suma o el uno para la el producto.
Cuatro simetrías: de eje horizontal (SH), de eje vertical (SV) y las que tienen por ejes las dos diagonales (SD1 y SD2).
Tres rotaciones: la de 90º (R90), la de media vuelta o simetría central (R180) y la de 270º (R270). El movimiento identidad podría ser considerado como una rotación de 0º (R0)
Componer dos movimientos consiste en realizar un movimiento y seguidamente realizar un segundo a lo que se ha obtenido. El resultado de la composición es otro movimiento. En el caso de estos ocho movimientos del cuadrado, la composición de dos de ellos siempre es uno de esos ocho. Eso es lo que en matemáticas se llama una ley de composición interna.
En el siguiente applet tenemos una prueba visual de esa ley interna. Con el deslizador verde podemos seleccionar el primer movimiento que veremos sobre el cuadrado de dos formas: en primer lugar por el cambio de colores de los vértices, además podemos ver dónde va a parar uno de los triángulos rectángulos resaltados en azul (1/8 del cuadrado).
Una vez seleccionado el primer movimiento, tenemos un segundo deslizador en color azul para elegir el segundo movimiento que se realizará a partir de la posición que ha dejado el anterior. Para comprobar cuál es el resultante, basta con ver a cuál de los ocho se asemeja el cuadrado central.

Ejemplos: R90 y R180 dan como resultado R270.  SV y SV dan I. SD y SH dan R180. Con SD1 y SD2 obtenemos R180.

I

SH

R90

SD1

R180

SV

R270

SD2

SD2
R270
SV
R180
SD1
R90
SH
I

SD2
R270
SV
R180
SD1
R90
SH
I

Primer movimiento

Segundo movimiento

A = (-2, 1)
B = (2, 1)
poly1, a, b, c, d, C, D = Polygon(A, B, 4)
E = Midpoint(D, B)
F = Midpoint(b)
G = Midpoint(d)
H = Midpoint(c)
I = Midpoint(a)
poly2, f, e, b_1 = Polygon(E, B, F)
D3 = (0, 6)
A3 = (2, 6)
poly3, g, k, l, m, B3, C3 = Polygon(D3, A3, 4)
A4 = (-3, 6)
D4 = (-1, 6)
poly4, h, o, p_2, q_4, C4, B4 = Polygon(A4, D4, 4)
C5 = (-5, 3)
D5 = (-3, 3)
poly5, i, s, t, u, A5, B5 = Polygon(C5, D5, 4)
B6 = (-5, 0)
A6 = (-3, 0)
poly6, v, w, z, a_1, D6, C6 = Polygon(B6, A6, 4)
B7 = (-2, -2)
C7 = (0, -2)
poly7, j, n, d_1, e_1, D7, A7 = Polygon(B7, C7, 4)
C8 = (1, -2)
B8 = (3, -2)
poly8, r, c_1, h_1, i_1, A8, D8 = Polygon(C8, B8, 4)
A1 = (3, 1)
B1 = (5, 1)
poly9, f_1, g_1, l_1, m_1, C1, D1 = Polygon(A1, B1, 4)
D2 = (3, 4)
C2 = (5, 4)
poly10, j_1, o_1, n_1, q_1, B2, A2 = Polygon(D2, C2, 4)
R_1 = Midpoint(D1, B1)
S_1 = Midpoint(A2, C2)
T_1 = Midpoint(C3, A3)
U_1 = Midpoint(B4, D4)
V_1 = Midpoint(B5, D5)
W_1 = Midpoint(C6, A6)
Z_1 = Midpoint(A7, C7)
A_2 = Midpoint(D8, B8)
B_2 = Midpoint(o_1)
C_2 = Midpoint(l)
D_2 = Midpoint(p_2)
E_2 = Midpoint(u)
F_2 = Midpoint(a_1)
G_2 = Midpoint(j)
H_2 = Midpoint(r)
I_2 = Midpoint(g_1)
poly11, k_1, r_1, i_2 = Polygon(R_1, I_2, B1)
poly12, p_1, s_1, b_2 = Polygon(S_1, B_2, B2)
poly13, c_2, t_1, l_2 = Polygon(T_1, B3, C_2)
poly14, q_2, u_1, d_2 = Polygon(U_1, D_2, B4)
poly15, e_2, v_1, u_2 = Polygon(V_1, B5, E_2)
poly16, v_2, w_1, f_2 = Polygon(W_1, F_2, B6)
poly17, g_2, z_1, b_3 = Polygon(Z_1, B7, G_2)
poly18, g_3, a_2, h_2 = Polygon(A_2, H_2, B8)
SD2 = Segment(A4, A8)
SD1 = Segment(A2, A6)
SV = Segment(D3, D7)
SH = Segment(D5, D1)
p = 3 (slider from 1 to 8, step 1)
AA2 = Point(SD1)
CC2 = Point(poly1)
DD2 = Point(poly1)
BB2 = Point(poly1)
DD3 = Point(poly1)
CC3 = Point(poly1)
BB3 = Point(poly1)
AA3 = Point(poly1)
BB4 = Point(poly1)
CC4 = Point(poly1)
AA4 = Point(poly1)
DD4 = Point(poly1)
AA5 = Point(poly1)
BB5 = Point(poly1)
CC5 = Point(poly1)
DD5 = Point(poly1)
q = 1 (slider from 1 to 8, step 1)
AA6 = Point(poly1)
BB6 = Point(poly1)
CC6 = Point(poly1)
DD6 = Point(poly1)
DD7 = Point(poly1)
CC7 = Point(poly1)
BB7 = Point(poly1)
AA7 = Point(poly1)
DD8 = Point(poly1)
CC8 = Point(poly1)
BB8 = Point(poly1)
AA8 = Point(poly1)
zz: {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 1, 4, 3, 6, 5, 8, 7}, {3, 8, 5, 2, 7, 4, 1, 6}, {4, 7, 6, 1, 8, 3, 2, 5}, {5, 6, 7, 8, 1, 2, 3, 4}, {6, 5, 8, 7, 2, 1, 4, 3}, {7, 4, 1, 6, 3, 8, 5, 2}, {8, 3, 2, 5, 4, 7, 6, 1}}
zp = Element(zz, p)
zpq = Element(zp, q)
poly19, c_3, e_3, f_3 = Polygon(E, F, C)
poly20, d_3, e_4, h_3 = Polygon(E, H, D)
poly21, g_4, e_5, d_4 = Polygon(E, D, G)
poly22, h_4, e_6, c_4 = Polygon(E, C, H)
poly23, a_3, e_7, g_5 = Polygon(E, G, A)
poly24, i_3, e_8, a_4 = Polygon(E, A, I)
poly25, b_4, e_9, i_4 = Polygon(E, I, B)
J = Point(SH)
j_2 = OrthogonalLine(J, SH)
K = Intersect(SD1, j_2)
k_2 = OrthogonalLine(K, j_2)
L = Intersect(SD2, k_2)
poly26, m_2, n_2, r_2, s_2, M, N = Polygon(K, L, 4)
w_2 = Vector(E, R_1)
z_2 = Vector(E, S_1)
t_2 = Vector(E, T_1)
u_3 = Vector(E, U_1)
v_3 = Vector(E, V_1)
w_3 = Vector(E, W_1)
z_3 = Vector(E, Z_1)
j_3 = Vector(E, A_2)
K' = Translate(K, w_2)
L' = Translate(L, w_2)
M' = Translate(M, w_2)
N' = Translate(N, w_2)
poly26', k', l', m', n' = Polygon(K', L', M', N')
K'_1 = Translate(K, z_2)
L'_1 = Translate(L, z_2)
M'_1 = Translate(M, z_2)
N'_1 = Translate(N, z_2)
poly26'_1, k'_1, l'_1, m'_1, n'_1 = Polygon(K'_1, L'_1, M'_1, N'_1)
K'_2 = Translate(K, t_2)
L'_2 = Translate(L, t_2)
M'_2 = Translate(M, t_2)
N'_2 = Translate(N, t_2)
poly26'_2, k'_2, l'_2, m'_2, n'_2 = Polygon(K'_2, L'_2, M'_2, N'_2)
K'_3 = Translate(K, u_3)
L'_3 = Translate(L, u_3)
M'_3 = Translate(M, u_3)
N'_3 = Translate(N, u_3)
poly26'_3, k'_3, l'_3, m'_3, n'_3 = Polygon(K'_3, L'_3, M'_3, N'_3)
K'_4 = Translate(K, v_3)
L'_4 = Translate(L, v_3)
M'_4 = Translate(M, v_3)
N'_4 = Translate(N, v_3)
poly26'_4, k'_4, l'_4, m'_4, n'_4 = Polygon(K'_4, L'_4, M'_4, N'_4)
K'_5 = Translate(K, w_3)
L'_5 = Translate(L, w_3)
M'_5 = Translate(M, w_3)
N'_5 = Translate(N, w_3)
poly26'_5, k'_5, l'_5, m'_5, n'_5 = Polygon(K'_5, L'_5, M'_5, N'_5)
K'_6 = Translate(K, z_3)
L'_6 = Translate(L, z_3)
M'_6 = Translate(M, z_3)
N'_6 = Translate(N, z_3)
poly26'_6, k'_6, l'_6, m'_6, n'_6 = Polygon(K'_6, L'_6, M'_6, N'_6)
K'_7 = Translate(K, j_3)
L'_7 = Translate(L, j_3)
M'_7 = Translate(M, j_3)
N'_7 = Translate(N, j_3)
poly26'_7, k'_7, l'_7, m'_7, n'_7 = Polygon(K'_7, L'_7, M'_7, N'_7)
K'_8 = Translate(K, w_2)
L'_8 = Translate(L, w_2)
M'_8 = Translate(M, w_2)
N'_8 = Translate(N, w_2)
poly26'_8, k'_8, l'_8, m'_8, n'_8 = Polygon(K'_8, L'_8, M'_8, N'_8)
K'_9 = Translate(K, z_2)
L'_9 = Translate(L, z_2)
M'_9 = Translate(M, z_2)
N'_9 = Translate(N, z_2)
poly26'_9, k'_9, l'_9, m'_9, n'_9 = Polygon(K'_9, L'_9, M'_9, N'_9)
K'_{10} = Translate(K, t_2)
L'_{10} = Translate(L, t_2)
M'_{10} = Translate(M, t_2)
N'_{10} = Translate(N, t_2)
poly26'_{10}, k'_{10}, l'_{10}, m'_{10}, n'_{10} = Polygon(K'_{10}, L'_{10}, M'_{10}, N'_{10})
K'_{11} = Translate(K, u_3)
L'_{11} = Translate(L, u_3)
M'_{11} = Translate(M, u_3)
N'_{11} = Translate(N, u_3)
poly26'_{11}, k'_{11}, l'_{11}, m'_{11}, n'_{11} = Polygon(K'_{11}, L'_{11}, M'_{11}, N'_{11})
K'_{12} = Translate(K, v_3)
L'_{12} = Translate(L, v_3)
M'_{12} = Translate(M, v_3)
N'_{12} = Translate(N, v_3)
poly26'_{12}, k'_{12}, l'_{12}, m'_{12}, n'_{12} = Polygon(K'_{12}, L'_{12}, M'_{12}, N'_{12})
K'_{13} = Translate(K, w_3)
L'_{13} = Translate(L, w_3)
M'_{13} = Translate(M, w_3)
N'_{13} = Translate(N, w_3)
poly26'_{13}, k'_{13}, l'_{13}, m'_{13}, n'_{13} = Polygon(K'_{13}, L'_{13}, M'_{13}, N'_{13})
K'_{14} = Translate(K, z_3)
L'_{14} = Translate(L, z_3)
M'_{14} = Translate(M, z_3)
N'_{14} = Translate(N, z_3)
poly26'_{14}, k'_{14}, l'_{14}, m'_{14}, n'_{14} = Polygon(K'_{14}, L'_{14}, M'_{14}, N'_{14})
K'_{15} = Translate(K, j_3)
L'_{15} = Translate(L, j_3)
M'_{15} = Translate(M, j_3)
N'_{15} = Translate(N, j_3)
poly26'_{15}, k'_{15}, l'_{15}, m'_{15}, n'_{15} = Polygon(K'_{15}, L'_{15}, M'_{15}, N'_{15})