Plantilla 3D
Author: Rafael Losada Liste

ancho = 6 (slider from 0 to 10, step 0.1)
u = (0, -1)
alto = 7 (slider from 0 to 10, step 0.1)
C = (-7.030344619420371, 2.0313579624222196)
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)
XY = Point(zElipse1)
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)
Z = Point(zElipse2)
zAngInc = Angle(Z8, C, Z)
radio: ancho / 2
v: alto cos(zAngInc) u
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)
zSeg2 = Segment(zPunto1, zPunto2)
zAngRot = Angle(Z6, C, XY)
elipseA1 = Conic(PuntoEsfera[C, XY, Z, radio, 0, 0], PuntoEsfera[C, XY, Z, radio, 0, 30], PuntoEsfera[C, XY, Z, radio, 0, 60], PuntoEsfera[C, XY, Z, radio, 0, 90], PuntoEsfera[C, XY, Z, radio, 0, -45])
elipseB1 = Conic(PuntoEsfera[C, XY, Z, radio, 0, 0] + v, PuntoEsfera[C, XY, Z, radio, 0, 30] + v, PuntoEsfera[C, XY, Z, radio, 0, 60] + v, PuntoEsfera[C, XY, Z, radio, 0, 90] + v, PuntoEsfera[C, XY, Z, radio, 0, -45] + v)
n = 3
α: 360 / n
listA = Sequence(PuntoEsfera[C, XY, Z, radio, 0, s α], s, 0, n)
listB = Sequence((x(Element[listA, s]), y(v) + y(Element[listA, s])), s, 1, n + 1)

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)