Author: Daniel Mentrard

B_1 = (-1.2670635020277627, -0.028554743301315477)
Vistas = (0.6065097919360077, 0.4800924243824667)
xa: x(Vistas)
sinphi: sin(xa)
cosphi: cos(xa)
ya: y(Vistas)
sintheta: sin(ya)
Zoom = 0.8 (slider from 0.1 to 5, step 0.1)
xy: -(Zoom) * cosphi * sintheta
g = 0.6000000000000005 (slider from -5 to 5, step 0.1)
X: (x(B_1) + Zoom * sinphi, y(B_1) + xy)
u = Vector(B_1, X)
O = (2.368394900261186, -0.29381972600335915)
k = 1.3000000000000007 (slider from -5 to 5, step 0.1)
costheta: cos(ya)
Z: (x(B_1) + 0.0, y(B_1) + Zoom * costheta)
w = Vector(B_1, Z)
a = OrthogonalLine(Vistas, yAxis)
b = OrthogonalLine(Vistas, xAxis)
c: cos(ya)
Y: (x(B_1) + Zoom * cosphi, y(B_1) + Zoom * sinphi * sintheta)
v = Vector(B_1, Y)
A = Translate(O, Vector[g * u])
B = Translate(O, Vector[g * v])
e = Segment(O, B)
D = Mirror(B, O)
E = Mirror(A, O)
h = Segment(D, O)
i = Segment(E, O)
C = Translate(O, Vector[k * w])
F = Midpoint(B, A)
G = Midpoint(B, F)
H = Midpoint(O, G)
I = Midpoint(H, G)
J = Mirror(I, G)
f = Conic(A, J, B, E, D)
j = Segment(C, A)
l = Segment(C, B)
m = Segment(C, E)
n = Segment(C, D)
p = Line(F, O)
K = Midpoint(B, E)
q = Line(K, O)
L, M = Intersect(f, p)
N, P = Intersect(f, q)
r = Segment(C, N)
s = Segment(C, L)
t = Segment(C, P)
a1 = Segment(C, M)
Q = (-0.7711636105238667, 1.3582906092174465)
R = Translate(Q, Vector[0.8 * v])
S = Translate(Q, Vector[0.8 * u])
T = Mirror(R, Q)
U = Mirror(S, Q)
V = Translate(Q, Vector[0.8 * w])
W = Midpoint(R, S)
A1 = Midpoint(U, T)
B1 = Midpoint(U, A1)
C1 = Midpoint(W, R)
D1 = Midpoint(B1, U)
E1 = Midpoint(C1, R)
F1 = Mirror(D1, A1)
G1 = Mirror(E1, W)
poly1, d1, e1, g1, f1 = Polygon(D1, E1, G1, F1)
c1 = Segment(V, E1)
h1 = Segment(V, G1)
i1 = Segment(V, D1)
j1 = Segment(V, F1)
k1 = Segment(V, Q)
H1 = (1.8524534666706352, 0.8807703462134262)
z = Vector(O, H1)
p1 = Translate(f, z)
I1 = Translate(C, z)
u1 = Vector(H1, I1)
q1 = Translate(p1, u1)
J1 = Translate(D, z)
K1 = Translate(N, z)
M1 = Translate(A, z)
N1 = Translate(M, z)
O1 = Translate(L, z)
P1 = Translate(E, z)
Q1 = Translate(P, z)
R1 = Translate(B, z)
S1 = Translate(J1, u1)
T1 = Translate(K1, u1)
U1 = Translate(M1, u1)
V1 = Translate(N1, u1)
W1 = Translate(R1, u1)
Z1 = Translate(Q1, u1)
A2 = Translate(O1, u1)
B2 = Translate(P1, u1)
l1 = Segment(S1, J1)
m1 = Segment(T1, K1)
n1 = Segment(U1, M1)
r1 = Segment(V1, N1)
s1 = Segment(W1, R1)
t1 = Segment(Z1, Q1)
a2 = Segment(B2, P1)
b2 = Segment(A2, O1)
C2 = (-1.87440008022281, 0.6118221521077136)
v1 = Vector(Q, C2)
D1' = Translate(D1, v1)
E1' = Translate(E1, v1)
G1' = Translate(G1, v1)
F1' = Translate(F1, v1)
poly1', d1', e1', g1', f1' = Polygon(D1', E1', G1', F1')
D2 = Translate(V, v1)
w1 = Vector(C2, D2)
D1'' = Translate(D1', w1)
E1'' = Translate(E1', w1)
G1'' = Translate(G1', w1)
F1'' = Translate(F1', w1)
poly1'', d1'', e1'', g1'', f1'' = Polygon(D1'', E1'', G1'', F1'')
c2 = Segment(F1'', F1')
e2 = Segment(E1'', E1')
f2 = Segment(D1'', D1')
L1 = Midpoint(g1')
d2 = Segment(G1'', G1')
E2 = Midpoint(e1')
F2 = Midpoint(c2)
G2 = Midpoint(g1)
H2 = Midpoint(k1)
k2 = Conic(M, B, P, E, D)
p2 = Conic(N1, R1, P1, J1, M1)
q2 = Conic(B2, W1, V1, T1, S1)
I2 = (1.2377147372861494, -0.8975809780774078)
d = Vector(H1, I2)
J2 = Translate(I2, u1)
g2 = Translate(q1, d)
h2 = Translate(p2, d)
K2 = Translate(P1, d)
L2 = Translate(N1, d)
M2 = Translate(K1, d)
poly2, k2_1, l2, m2 = Polygon(L2, M2, K2)
L2' = Translate(L2, u1)
M2' = Translate(M2, u1)
K2' = Translate(K2, u1)
poly2', k2', l2', m2' = Polygon(L2', M2', K2')
b1 = Segment(K2', K2)
i2 = Segment(L2', L2)
j2 = Segment(M2', M2)
poly3, k2_2, m2_1, l2_1 = Polygon(M2, L2, K2)
N2 = (0.5571111440390402, 1.2814482680443857)
z1 = Vector(H1, N2)
r2 = Translate(p2, z1)
O2 = Translate(R1, z1)
P2 = Translate(M1, z1)
Q2 = Translate(J1, z1)
R2 = Translate(P1, z1)
poly4, q2_1, p2_1, o2, r2_1 = Polygon(Q2, P2, O2, R2)
Q2' = Translate(Q2, w1)
P2' = Translate(P2, w1)
O2' = Translate(O2, w1)
R2' = Translate(R2, w1)
poly4', q2', p2', o2', r2' = Polygon(Q2', P2', O2', R2')
n2 = Segment(O2', O2)
s2 = Segment(P2', P2)
t2 = Segment(Q2', Q2)
a3 = Segment(R2', R2)
S2 = (0, -1)
u2 = Vector(H1, S2)
T2 = Translate(N1, u2)
U2 = Translate(M1, u2)
V2 = Translate(K1, u2)
W2 = Translate(J1, u2)
Z2 = Translate(O1, u2)
A3 = Translate(P1, u2)
B3 = Translate(Q1, u2)
C3 = Translate(R1, u2)
poly5, u2_1, v2, w2, z2, a3_1, b3, c3, t2_1 = Polygon(U2, V2, W2, Z2, A3, B3, C3, T2)
U2' = Translate(U2, u1)
V2' = Translate(V2, u1)
W2' = Translate(W2, u1)
Z2' = Translate(Z2, u1)
A3' = Translate(A3, u1)
B3' = Translate(B3, u1)
C3' = Translate(C3, u1)
T2' = Translate(T2, u1)
poly5', u2', v2', w2', z2', a3', b3', c3', t2' = Polygon(U2', V2', W2', Z2', A3', B3', C3', T2')
d3 = Segment(C3', C3)
e3 = Segment(T2', T2)
f3 = Segment(U2', U2)
g3 = Segment(V2', V2)
h3 = Segment(W2', W2)
i3 = Segment(Z2', Z2)
j3 = Segment(A3', A3)
k3 = Segment(B3', B3)
D3 = (-1.3529699079770408, -0.8152498982491284)
u3 = Vector(N2, D3)
Q2'_1 = Translate(Q2, u3)
P2'_1 = Translate(P2, u3)
O2'_1 = Translate(O2, u3)
R2'_1 = Translate(R2, u3)
poly4'_1, q2'_1, p2'_1, o2'_1, r2'_1 = Polygon(Q2'_1, P2'_1, O2'_1, R2'_1)
Q2'_1' = Translate(Q2'_1, u1)
P2'_1' = Translate(P2'_1, u1)
O2'_1' = Translate(O2'_1, u1)
R2'_1' = Translate(R2'_1, u1)
poly4'_1', q2'_1', p2'_1', o2'_1', r2'_1' = Polygon(Q2'_1', P2'_1', O2'_1', R2'_1')
l3 = Segment(P2'_1', P2'_1)
m3 = Segment(O2'_1', O2'_1)
n3 = Segment(Q2'_1', Q2'_1)
p3 = Segment(R2'_1', R2'_1)