Los movimiento en un mosaico. Escher

Se toma el mosaico de las mariposas de M.C. Escher para  realizar una animación con el movimiento que seleccionamos para que vuelva a colocarse sobre él mismo.

-La traslación con dos vectores perpendiculares.
-Dos rotaciones, de 180º con centro de giro en el centro de una mariposa y otra de 90º en el punto de confluencia de cuatro alas.
-La simetría respecto de un eje que pasa por los centros de las mariposas.
-La simetría con deslizamiento: primero una simetría axial y después una  traslación con vector paralelo al eje de simetría.

Si activamos el botón Todas las simetrías se resaltan dos vectores de traslación (morado), centros de rotación de orden 2 (rosa) y 4 (rojo), los ejes de simetría axial (verde) y los ejes de simetría con deslizamiento (amarillo)

Traslación

Rotación

Simetría

Sim con desliz

Eje recta x = 5

Todas las simetrías

Ocultar simetrías

B = (1, 0)
AT1: (1, 4.52)
c1 = 0 (slider from 0 to 3)
c11 = Min(c1, 1)
o = 2.325 (slider from 2.2 to 2.4, step 0.001)
CSD = (6.1, -3.4)
h1 = OrthogonalLine(CSD, xAxis)
G = Point(h1)
c4 = 0 (slider from 0 to 3)
u1 = Vector((0, -1), (0, 3.52))
BH_1: B + (c11 * u1)
c41 = Min(c4, 0.99)
BX = Mirror(BH_1, h1)
H1: B + (c41 * (BX - B))
r = OrthogonalLine(H1, xAxis)
e = CircleArc(G, BH_1, BX)
C = (5, -4)
BH: B
h = OrthogonalLine(C, xAxis)
D = Point(h)
b = 7.92 (slider from 1 to 15, step 0.01)
B1: B + (b, 0)
BH1: B1
AR1 = (4.96, 5.72)
A: (-3, -4.12)
a = 16 (slider from 1 to 16, step 0.01)
A1: A + (a, 0)
ay = Random(-5, -1)
ax = Random(-3, 3)
c = 3 (slider from 0 to 5, step 1)
v1 = Vector(B, BH_1)
bx = Random(0, 5)
by = Random(-2, 2)
CG: AR1
br = Random(4, 10)
br1: (br * π / 10)
c2 = 0 (slider from 0 to 3)
br2: (180 * br1 / π)
c3 = 0.133 (slider from 0 to 1, step 0.001)
g = Line(A, A1)
i = OrthogonalLine(B, xAxis)
E = Point(i)
ds = Distance(B, E)
BS: BH + (c3 * (BH1 - BH))
j = Segment(B, B1)
k = CircleArc(D, BH, BH1)
l = OrthogonalLine(BS, xAxis)
F = Intersect(k, l, 1)
F1: F + E - B
dd1 = Random(-1, 3)
e1 = Random(2, 4)
e2 = Random(1, 4)
c42 = Max(c4 - 2, 0)
SD2: (1, 15)
H = Intersect(h, j)
F' = Mirror(F, H)
BSD: B + (c41 * (B1 - B))
f = OrthogonalLine(BSD, xAxis)
k1: k
f1 = Random(-4, -2)
texto1: "Vector " + u1 + ""
n: π
c21 = Min(π, (π * c2))
c22 = Max(0, Min[π, ((c2 - 2) * π / 2)])
Máximo(0, Mínimo(π, (c2 - 1) π)) = Max(0, Min[π, ((c2 - 2) * π)])
AR2 = (6.14, 4.6)
K = (0.4025454545454531, -6.314545454545462)
imt1 = Translate(im2, v1)
imr1 = Rotate(im2, c21, AR1)
imr2 = Rotate(im2, c22, AR2)
BY = Mirror(B1, h1)
d = CircleArc(G, BY, B1)
H2: B1 + (c41 * (BY - B1))
p = OrthogonalLine(H2, xAxis)
q = OrthogonalLine(H1, xAxis)
J = Intersect(d, p)
L = Intersect(xAxis, h1)
I = Intersect(e, r)
I' = Mirror(I, L)
J' = Mirror(J, L)
J'_1 = Mirror(J, xAxis)
c12 = Max(c1 - 2, 0)
o1 = 4.47 (slider from 4.2 to 5.2, step 0.001)
I1: B + (o1, 0)
AT2: B + (o1, 0)
u2 = Vector(B - (1, 1), B + (o1 - 1, -1))
v2 = Vector(B, B + (u2 * c12))
imt2 = Translate(imt1, v2)
O = Point(yAxis)
w: O
imsd2 = Translate(imsd1, Vector[(w * c42)])
w1 = Vector(J'_1, J'_1 + (c42 * w))
c5 = 0 (slider from 0 to 1, step 1)
t = OrthogonalLine(AR1, yAxis)
f_1 = OrthogonalLine(AR1, xAxis)
N = Intersect(f_1, t)
Q = (3.86, 6.88)
N' = Mirror(N, Q)
M = (6.08, 4.58)
N'_1 = Mirror(N, M)
Q' = Mirror(Q, M)
P = Mirror(N'_1, f_1)
M' = Mirror(M, f_1)
m = OrthogonalLine(N'_1, xAxis)
s = OrthogonalLine(M, xAxis)
g_1 = OrthogonalLine(M', xAxis)
h_1 = OrthogonalLine(M', yAxis)
i_1 = OrthogonalLine(P, yAxis)
j_1 = OrthogonalLine(P, xAxis)
k_1 = OrthogonalLine(Q, yAxis)
l_1 = OrthogonalLine(N', yAxis)
M'_1 = Mirror(M, g_1)
R = Mirror(M'_1, i_1)
Q'_1 = Mirror(Q, l_1)
m_1 = OrthogonalLine(Q'_1, yAxis)
n_1 = OrthogonalLine(R, yAxis)
p_1 = OrthogonalLine(R, xAxis)
q_1 = OrthogonalLine(Q', xAxis)
P' = Mirror(P, n_1)
N'' = Mirror(N', m_1)
r_1 = OrthogonalLine(N'', yAxis)
s_1 = OrthogonalLine(P', yAxis)
S = Intersect(j_1, t)
T = Intersect(j_1, l_1)
U = Intersect(f_1, r_1)
V = Intersect(m, r_1)
W = Intersect(m, l_1)
Z = Intersect(m, t)
A_1 = Intersect(f_1, l_1)
B_1 = Intersect(f_1, i_1)
C_1 = Intersect(g_1, n_1)
D_1 = Intersect(s, n_1)
E_1 = Intersect(s_1, m)
F_1 = Intersect(f_1, s_1)
G_1 = Intersect(h_1, q_1)
H_1 = Intersect(p_1, k_1)
I_1 = Intersect(s, k_1)
J_1 = Intersect(s, m_1)
K_1 = Intersect(p_1, m_1)
L_1 = Intersect(q_1, m_1)
M_1 = Intersect(q_1, k_1)