Plantilla 3D
Author: Rafael Losada Liste

O = (0, 0)
d = Circle((0, 0), 6)
A = Point(d)
p = 3.141592653589793
α = Angle((1, 0), (0, 0), A)
a = 3 (slider from 0 to 10, step 1)
b = 2 (slider from 0 to 10, step 1)
c = CurveCartesian(4 sin(a t + α), 4 sin(b t), t, 0, 2 p)
T1: α + ""

Tool: Punto3D
Punto3D[ XY, Z, Lista {Px, Py, Pz} ]
Input: XY, Z, P
Output: zConstruccionP'

zAngInc = Angle((-3, 6), (-3, 5), Z)
zAngRot = Angle((-2, 5), (-3, 5), XY)
P: {0, -3, -3}
zConstruccionP': (Element[P, 1] sin(zAngRot) + Element[P, 2] cos(zAngRot), -Element[P, 1] cos(zAngRot) sin(zAngInc) + Element[P, 2] sin(zAngRot) sin(zAngInc) + Element[P, 3] cos(zAngInc))

Tool: Distancia3D
Distancia3D[ Lista punto1, Lista punto2 ]
Input: A, B
Output: distancia3D

B: {1, 0, 1}
A: {0, 1, 1}
A1 = Element(A, 1)
A2 = Element(A, 2)
A3 = Element(A, 3)
B1 = Element(B, 1)
B2 = Element(B, 2)
B3 = Element(B, 3)
distancia3D: sqrt((B1 - A1)^(2) + (B2 - A2)^(2) + (B3 - A3)^(2))

Tool: Angulo3D (command Angulo3D1)
Angulo3D[ Lista punto inicial, Lista punto centro, Lista punto final]
Input: A, P, B
Output: ang

P: {1, 1, 1}
A: {0, 2, 1}
B: {1, -2, 0}
a: {Element[A, 1] - Element[P, 1], Element[A, 2] - Element[P, 2], Element[A, 3] - Element[P, 3]}
b: {Element[B, 1] - Element[P, 1], Element[B, 2] - Element[P, 2], Element[B, 3] - Element[P, 3]}
ab: Element[a, 1] Element[b, 1] + Element[a, 2] Element[b, 2] + Element[a, 3] Element[b, 3]
am: sqrt(Element[a, 1]^(2) + Element[a, 2]^(2) + Element[a, 3]^(2))
bm: sqrt(Element[b, 1]^(2) + Element[b, 2]^(2) + Element[b, 3]^(2))
ang: acos(ab / (am bm)) 180 ° / 3.141592653589793

Tool: Plano que pasa por  3 puntos (command Plano)
Plano[ XY, Z, Lista punto1, Lista punto2, Lista punto3]
Input: XY, Z, P, A, B
Output: poly1, poly2, angG

B: {1, 0, 1}
A: {0, 1, 1}
P: {1, 1, 1}
p3 = Element(P, 3)
p2 = Element(P, 2)
p1 = Element(P, 1)
b: {Element[B, 1] - Element[P, 1], Element[B, 2] - Element[P, 2], Element[B, 3] - Element[P, 3]}
b3 = Element(b, 3)
b2 = Element(b, 2)
b1 = Element(b, 1)
a: {Element[A, 1] - Element[P, 1], Element[A, 2] - Element[P, 2], Element[A, 3] - Element[P, 3]}
a3 = Element(a, 3)
a2 = Element(a, 2)
a1 = Element(a, 1)
n: {a2 b3 - a3 b2, a3 b1 - a1 b3, a1 b2 - a2 b1}
n3 = Element(n, 3)
n2 = Element(n, 2)
n1 = Element(n, 1)
Z4 = Punto3D(XY, Z, {5, -3, Element[P, 3]})
Z3 = Punto3D(XY, Z, {5, 5, Element[P, 3]})
Z2 = Punto3D(XY, Z, {-3, 5, Element[P, 3]})
Z1 = Punto3D(XY, Z, {-3, -3, Element[P, 3]})
Y4 = Punto3D(XY, Z, {-3, -n3 * (5 - p3) / n2 + p2, 5})
Y3 = Punto3D(XY, Z, {5, -n3 * (5 - p3) / n2 + p2, 5})
Y2 = Punto3D(XY, Z, {5, -n3 * (-3 - p3) / n2 + p2, -3})
Y1 = Punto3D(XY, Z, {-3, -n3 * (-3 - p3) / n2 + p2, -3})
X4 = Punto3D(XY, Z, {If[n1 ≟ 0, 0, (-n2 * (5 - p2) - n3 * (-3 - p3)) / n1 + p1], 5, -3})
V4 = If(n1 ≟ 0, If[n2 ≟ 0, Z4, Y4], X4)
X3 = Punto3D(XY, Z, {If[n1 ≟ 0, 0, (-n2 * (5 - p2) - n3 * (5 - p3)) / n1 + p1], 5, 5})
V3 = If(n1 ≟ 0, If[n2 ≟ 0, Z3, Y3], X3)
X2 = Punto3D(XY, Z, {If[n1 ≟ 0, 0, (-n2 * (-3 - p2) - n3 * (5 - p3)) / n1 + p1], -3, 5})
V2 = If(n1 ≟ 0, If[n2 ≟ 0, Z2, Y2], X2)
X1 = Punto3D(XY, Z, {If[n1 ≟ 0, 0, (-n2 * (-3 - p2) - n3 * (-3 - p3)) / n1 + p1], -3, -3})
V1 = If(n1 ≟ 0, If[n2 ≟ 0, Z1, Y1], X1)
poly1, c, d, e, f = Polygon(V1, V2, V3, V4)
G: (V1 + V2 + V3 + V4) / 4
angG = Angle(V2, G, V1)
poly2, v1, v2, v3, v4 = Polygon(V1, V2, V3, V4)