Cascada

Maurits Cornelius Escher. Litografía. 1961

Escher conduce el agua lentamente por un acueducto construido al componer dos de los tribar (triángulos imposibles) de Roger Penrose. Nos produce una confusión entre la sensación de que el agua asciende cuando se aleja mientras los escalones del canal parecen descender progresivamente. Para terminar de confundirnos, la cascada nos devuelve el agua al sitio donde mueve una rueda de molino y volverá a empezar su curso ascendente-descendente y continuar así en una máquina de movimiento perpetuo.

Se ha colocado una pelota que se desliza por los canales cuyo tamaño viene dado por la perspectiva oblicua que determinan los dos puntos de fuga. Disponemos de una casilla para poder modificar el tamaño de la pelota flotante. Además cada vez que pasa por detrás de algún pilar, hacemos que la pelota se oculte

Tamaño

de la pelota

FD = (23.844877905068095, 13.465919339348517)
P5 = (2.765711468337627, 6.064560536525391)
p = Ray(FD, P5)
P3 = (3.1345669606823656, 4.1178232158170385)
d = 12 (slider from 1 to 15, step 0.01)
A1 = (-2.6443708161757136, -2.074030197444827)
A2: A1 + (d, 0)
r1 = Line(A1, A2)
n = Ray(FD, P3)
f_1 = Line(FD, r1)
FI = Point(f_1)
q = Ray(FI, P5)
P1 = (3.1067431391629823, 1.7808658870211895)
l = Ray(FD, P1)
r = Ray(FI, P3)
A = (2.788655834464249, -2.6830519294489)
P2 = Intersect(l, r)
f = Line(P1, P2)
a = 0 (slider from 0 to 10, step 0.01)
a6 = Max(0, Min[1, a - 6])
a5 = Max(0, Min[1, a - 5])
P6 = Point(p)
R5: P5 + (a5 * (P6 - P5))
a2 = Max(0, Min[1, a - 2])
R2: P2 + (a2 * (P3 - P2))
a4 = Max(0, Min[1, a - 4])
P4 = Intersect(n, q)
R4: P4 + (a4 * (P5 - P4))
a3 = Max(0, Min[1, a - 3])
R3: P3 + (a3 * (P4 - P3))
a1 = Max(0, Min[1, a - 1])
R1: P1 + (a1 * (P2 - P1))
a7 = Max(0, Min[1, a - 7])
m = OrthogonalLine(P6, r1)
P7 = Intersect(f, m)
R7: P7 + (a7 * (P1 - P7))
R6: P6 + (a6 * (P7 - P6))
R = If(a > 1 ∧ a ≤ 2, R1, If[a > 2 ∧ a ≤ 3, R2, If[a > 3 ∧ a ≤ 4, R3, If[a > 4 ∧ a ≤ 5, R4, If[a > 5 ∧ a ≤ 6, R5, If[a > 6 ∧ a ≤ 7, R6, If[a > 7 ∧ a ≤ 8, R7, P1]]]]]])
o = 3.16 (slider from 1 to 10, step 0.001)
c = 13.76 (slider from 0 to 20, step 0.01)
a16 = Max(0, Min[1, a - 16])
a17 = Max(0, Min[1, a - 17])
a8 = Max(0, Min[1, a - 8])
a9 = Max(0, Min[1, a - 9])
a11 = Max(0, Min[1, a - 11])
a12 = Max(0, Min[1, a - 12])
a15 = Max(0, Min[1, a - 15])
a18 = Max(0, Min[1, a - 18])
a19 = Max(0, Min[1, a - 19])
a10 = Max(0, Min[1, a - 10])
a13 = Max(0, Min[1, a - 13])
a14 = Max(0, Min[1, a - 14])
b = 10 (slider from 0.5 to 20, step 0.01)
a71 = Max(0, Min[0.32, a - 7.4])
u = 1 (slider from 0 to 2)
dd: (1.25 * d)
a61 = Min(1, (2 * a6))
a62 = Max(0, (2 * (a6 - 0.5)))
a20 = Max(0, Min[1, a - 20])
a21 = Max(0, Min[1, a - 21])
a22 = Max(0, Min[1, a - 22])
a23 = Max(0, Min[1, a - 23])
a24 = Max(0, Min[1, a - 24])
a25 = Max(0, Min[1, a - 25])
a26 = Max(0, Min[1, a - 26])
a27 = Max(0, Min[1, a - 27])
a28 = Max(0, Min[1, a - 28])
a29 = Max(0, Min[1, a - 29])
a30 = Max(0, Min[1, a - 30])
a31 = Max(0, Min[1, a - 31])
a32 = Max(0, Min[1, a - 32])
a33 = Max(0, Min[1, a - 33])
a34 = Max(0, Min[1, a - 34])
a35 = Max(0, Min[1, a - 35])
a36 = Max(0, Min[1, a - 36])
a37 = Max(0, Min[1, a - 37])
in1 = If(a > 32.5 ∧ a < 32.7, 1, 0)
in2 = If(a > 35.5 ∧ a < 35.7, 1, 0)
in = If(in1 ≟ 1 ∨ in2 ≟ 1, 1, 0)
g = Line(P2, P3)
h = Line(P3, P4)
i = Line(P4, P5)
j = Line(P5, P6)
dr = Distance(R, A)
rd = 49.5 (slider from 5 to 50)
ddr: 0.3 - dr / rd
cr = Circle(R, ddr)
k = Line(A, r1)
ver = If(a > 1.03 ∧ a < 1.2, 0, If[a > 2.1 ∧ a < 2.25, 0, If[a > 3.02 ∧ a < 3.19, 0, If[a > 4.07 ∧ a < 4.2, 0, If[a > 4.92 ∧ a < 5.24, 0, If[a > 7.45 ∧ a < 8, 0, 1]]]]])
v1 = Distance(P1, P2)
v3 = Distance(P3, P4)
v2 = Distance(P2, P3)
v4 = Distance(P4, P5)
v5: (Distance[P5, P6] * 3)
v6: (Distance[P6, P7] * (1 + (2 * a6)))
v7: (Distance[P7, P1] * 3)
v = If(a > 1 ∧ a ≤ 2, v1, If[a > 2 ∧ a ≤ 3, v2, If[a > 3 ∧ a ≤ 4, v3, If[a > 4 ∧ a ≤ 5, v4, If[a > 5 ∧ a ≤ 6, v5, If[a > 6 ∧ a ≤ 7, v6, If[a > 7 ∧ a ≤ 8, v7, 1]]]]]])
texto1 = LaTeX(ddr, true, true)
s = OrthogonalLine(P1, l)
e = 0.2 (slider from 0.1 to 0.35, step 0.05)
c0 = Circle(P1, e)
B = Intersect(c0, s, 1)
g_1 = Ray(FD, B)
h_1 = OrthogonalLine(P2, l)
i_1 = OrthogonalLine(R1, l)
C1 = Intersect(i_1, g_1)
c1 = Circle(R1, C1)
j_1 = OrthogonalLine(P2, r)
C11 = Intersect(c1, j_1, 1)
k_1 = OrthogonalLine(R2, r)
l_1 = Ray(FI, C11)
C2 = Intersect(k_1, l_1)
c2 = Circle(R2, C2)
m_1 = OrthogonalLine(R3, n)
n_1 = OrthogonalLine(P3, n)
C22 = Intersect(c2, n_1, 1)
p_1 = Ray(FD, C22)
C3 = Intersect(m_1, p_1)
c3 = Circle(R3, C3)
q_1 = OrthogonalLine(R4, q)
r_1 = OrthogonalLine(P4, q)
C33 = Intersect(c3, r_1, 1)
s_1 = Ray(FI, C33)
C4 = Intersect(q_1, s_1)
c4 = Circle(R4, C4)
t_1 = OrthogonalLine(P5, p)
C44 = Intersect(c4, t_1, 1)
a_1 = Ray(FD, C44)
b_1 = OrthogonalLine(R5, p)
C5 = Intersect(b_1, a_1)
c5 = Circle(R5, C5)
c_1 = OrthogonalLine(P7, m)
d_1 = OrthogonalLine(R5, m)
f_2 = OrthogonalLine(P7, l)
C61 = Intersect(f_2, g_1)
c66 = Circle(P7, C61)
D = Intersect(c5, d_1, 2)
C66 = Intersect(c66, c_1, 2)
g_2 = Segment(D, C66)
h_2 = OrthogonalLine(R6, m)
C6 = Intersect(h_2, g_2)
c6 = Circle(R6, C6)
e_1 = OrthogonalLine(R7, l)
C = Intersect(e_1, g_1)
c7 = Circle(R7, C)
cc = If(a > 1 ∧ a ≤ 2, c1, If[a > 2 ∧ a ≤ 3, c2, If[a > 3 ∧ a ≤ 4, c3, If[a > 4 ∧ a ≤ 5, c4, If[a > 5 ∧ a ≤ 6, c5, If[a > 6 ∧ a ≤ 7, c6, If[a > 7 ∧ a ≤ 8, c7, c0]]]]]])
cd: cc
t = true
vv: v / 5
ee: (20 * e) + 5
texto3: "" + ee + ""