Plantilla 3D
Author: Rafael Losada Liste

C = (-6.186720746758199, 5.2760651649690375)
z2 = OrthogonalLine(C, xAxis)
z0 = Circle(C, 0.62)
Z4 = Intersect(z0, z2, 1)
Z3 = Intersect(z0, z2, 2)
zElipse2 = Ellipse(Z3, Z4, 0.65)
Z = Point(zElipse2)
Z7, Z8 = Intersect(zElipse2, z2)
zAngInc = Angle(Z8, C, Z)
z1 = OrthogonalLine(C, yAxis)
Z2 = Intersect(z0, z1, 2)
Z1 = Intersect(z0, z1, 1)
zElipse1 = Ellipse(Z1, Z2, 0.65)
XY = Point(zElipse1)
alto = 7 (slider from 0 to 10, step 0.1)
u = (0, -1)
v: alto cos(zAngInc) u
O = Translate((0, 0), v)
d = OrthogonalLine(O, yAxis)
G = Point(d)
w = Vector((0, 0), G)
ancho = 6 (slider from 0 to 10, step 0.1)
radio: ancho / 2
n = 5
α: 360 / n
puntosA = Sequence(PuntoEsfera[C, XY, Z, radio, 0, s α], s, 0, n)
puntosB = Sequence((x(w) + x(Element[puntosA, s]), y(w) + y(Element[puntosA, s])), s, 1, n + 1)
aristas = Sequence(Segment[Element[puntosB, s], Element[puntosA, s]], s, 1, n)
a5 = Element(aristas, 5)
J = Point(a5)
a1 = Element(aristas, 1)
A = Point(a1)
a2 = Element(aristas, 2)
B = Point(a2)
a3 = Element(aristas, 3)
D = Point(a3)
a4 = Element(aristas, 4)
E = Point(a4)
B5 = Element(puntosB, 5)
B1 = Element(puntosB, 1)
B2 = Element(puntosB, 2)
B3 = Element(puntosB, 3)
B4 = Element(puntosB, 4)
nada = 0
Z5, Z6 = Intersect(zElipse1, z1)
z4 = Segment(Z5, Z6)
z3 = Segment(Z7, Z8)
zPunto1 = Intersect(zElipse2, zElipse1, 1)
zPunto2 = Intersect(zElipse2, zElipse1, 4)
poly2, a, b, c, e, f = Polygon(B1, B2, B3, B4, B5)
zSeg2 = Segment(zPunto1, zPunto2)
zAngRot = Angle(Z6, C, XY)
angulos = Sequence(Angle[Element[puntosB, s + 1], Element[puntosB, s], Element[puntosA, s + 1]], s, 1, n)
aristasVisibles = Sequence(If[s > 1 ∧ Element[angulos, s - 1] > 180 ° ∧ Element[angulos, s] > 180 °, false, If[s ≟ 1 ∧ Element[angulos, n] > 180 ° ∧ Element[angulos, s] > 180 °, false, true]], s, 1, n)
a1b = Element(aristas, 1)
poly1, g, h, i, j, k_2 = Polygon(A, B, D, E, J)
a2b = Element(aristas, 2)
a3b = Element(aristas, 3)
carasVisibles = Sequence(If[Element[angulos, s] > 180 °, false, true], s, 1, n)
β = Angle(B1, B2, B3)
a4b = Element(aristas, 4)
poly3, b_1, a_1, d_1 = Polygon(A, D, B)
F: (E + A + D) / 3
H: (A + D + B) / 3
I = Midpoint(A, D)
γ = Angle(H, I, F)
k = 0.30000000000000004 (slider from 0 to 1, step 0.1)
a5b = Element(aristas, 5)
poly6, e_1, j_1, a_3 = Polygon(J, A, E)
K: (J + E + A) 3
L: (A + E + J) / 3
M = Midpoint(B1, B4)
l = Line(M, a5)
N = Intersect(j_1, l)
δ = Angle(L, N, F)
z = Vector(B1, B5)
m = Vector(B5, B4)
p = Vector(B4, B3)
q = Vector(B3, B2)
r = Vector(B2, B1)
P: B1 + k z
Q: B5 + k m
R: B4 + k p
S: B3 + k q
T: B2 + k r
s = Line(P, a5)
t = Line(Q, a5)
c_1 = Line(R, a5)
f_1 = Line(S, a5)
g_1 = Line(T, a5)
U = Intersect(k_2, s)
V = Intersect(j, t)
W = Intersect(i, c_1)
A_1 = Intersect(h, f_1)
B_1 = Intersect(g, g_1)
poly4, q_1, r_1, s_1, t_1, p_1 = Polygon(Q, R, S, T, P)
poly5, b1, b5, b4 = Polygon(B5, B4, B1)
C_1 = Intersect(t_1, b5)
D_1 = Intersect(q_1, b5)
poly7, b2, b1_1, b3 = Polygon(B1, B3, B2)
E_1 = Intersect(t_1, b2)
F_1 = Intersect(r_1, b2)
h_1 = Line(C_1, a5)
i_1 = Line(D_1, a5)
k_1 = Line(E_1, a5)
l_1 = Line(F_1, a5)
G_1 = Intersect(j_1, i_1)
H_1 = Intersect(j_1, h_1)
I_1 = Intersect(b_1, k_1)
J_1 = Intersect(b_1, l_1)
poly8, h_2, u_1, v_1, g_2 = Polygon(H_1, U, V, G_1)
poly9, g_3, w_1, j_2, i_2, h_3 = Polygon(G_1, W, J_1, I_1, H_1)
poly10, j_3, a_2, b_2, i_3 = Polygon(J_1, A_1, B_1, I_1)
razon: (2 k - 1)^(2) sin(180 ° / n)^(2) + cos(180 ° / n)^(2)
text1: "r(5, " + k + ") = " + razon

Tool: Punto3D
[C,XY,Z,Lista 3D]
Input: C, XY, Z, A
Output: H'

z1 = OrthogonalLine(C, yAxis)
z0 = Circle(C, 0.62)
Z1 = Intersect(z0, z1, 1)
Z2 = Intersect(z0, z1, 2)
zElipse1 = Ellipse(Z1, Z2, 0.65)
Z5, Z6 = Intersect(zElipse1, z1)
z2 = OrthogonalLine(C, xAxis)
Z3 = Intersect(z0, z2, 2)
Z4 = Intersect(z0, z2, 1)
zElipse2 = Ellipse(Z3, Z4, 0.65)
Z7, Z8 = Intersect(zElipse2, z2)
zAngInc = Angle(Z8, C, Z)
zAngRot = Angle(Z6, C, XY)
A: {3, 0, 0}
H': (Element[A, 1] sin(zAngRot) + Element[A, 2] cos(zAngRot), -Element[A, 1] cos(zAngRot) sin(zAngInc) + Element[A, 2] sin(zAngRot) sin(zAngInc) + Element[A, 3] cos(zAngInc))

Tool: PuntoEsfera
PuntoEsfera[C,XY,Z,radio,latitud,longitud]
Input: C, XY, Z, radio, latP, longP
Output: P'

z1 = OrthogonalLine(C, yAxis)
z0 = Circle(C, 0.62)
Z1 = Intersect(z0, z1, 1)
Z2 = Intersect(z0, z1, 2)
zElipse1 = Ellipse(Z1, Z2, 0.65)
z2 = OrthogonalLine(C, xAxis)
Z3 = Intersect(z0, z2, 2)
Z4 = Intersect(z0, z2, 1)
zElipse2 = Ellipse(Z3, Z4, 0.65)
P: {radio cos(latP °) cos(longP °), radio cos(latP °) sin(longP °), radio sin(latP °)}
P' = Punto3D(C, XY, Z, P)