g[a_, b_, R_, r_][n_, m_, k_][u_,
s_] :=
(alpha[a, b][n, m][u] + #1 &
) /@
(RR[be[n][u]][i[f[k][R, r][u, s]]]
. base[n, m][u])
donde
alpha[a_, b_][n_, m_][u_] :=
{(a + b*Cos[n*u])*Cos[m*u], (a
+ b*Cos[n*u])*Sin[m*u], b*Sin[n*u]}
es un nudo torico de tipo (n,m)
RR[b_][{x_, y_}] := {x, y} . {{Cos[b], Sin[b]}, {-Sin[b], Cos[b]}}
be[n_][u_] := n*u
i[{a_, b_}] := {{a, b}, {-a, b}}
f[k_][R_, r_][t_, s_] :=
N[{Sqrt[(R + r*Cos[c[R, r][p[k,
r][t]]*s])^2 - p[k, r][t]^2],
r*Sin[c[R, r][p[k, r][t]]*s]}]
c[R_, r_][p_] := If[p > R - r, ArcCos[(p - R)/r], Pi]
p[k_, r_][u_] := r*(1 + Cos[k*u])
base[n_, m_][u_] := {{Cos[m*u],
Sin[m*u], 0}, {0, 0, 1}}
R[b_][{x_, y_}] := {x, y} . {{Cos[b],
Sin[b]}, {-Sin[b], Cos[b]}}
Para realizar la figura en tres dimensiones utilizamos:
dib=ParametricPlot3D[g[20,8,2,1][3,4,35][u,s]//Evaluate,
{u,0,2 Pi},{s,-1,1},PlotPoints->{750,20},
DisplayFunction->Identity];
Y para visualizarla sin aristas:
aux[Graphics3D[l_,op_]]:=Graphics3D[{EdgeForm[],l}];
Show[aux[dib],DisplayFunction->$DisplayFunction,Axes->None,Boxed->False]
Más generalmente, podemos
definir las ecuaciones:
g[alpha_,bet_,k_][r_][u_,s_]:=Map[(alpha[u]+#)&,
RR[bet[u]][i[f[k][2 r,r][u,s]]].base[alpha][u]]
donde alpha es una curva cualquiera
y la siguiente funcion nos devuelve su vector
normal y binormal:
base[alpha_][u_]:=Module[{normal,binormal,a1,a2,a3,n},
a1=D[alpha[uu],uu] /.uu->u ;
a2=D[alpha[uu],{uu,2}] /.uu->u;
a3=D[alpha[uu],{uu,3}] /.uu->u;
binormal=Cross[a1,a2];n=Sqrt[binormal.binormal];binormal=binormal/n;
n=Sqrt[a1.a1];a1=a1/n;normal=Cross[binormal,a1];
{normal,binormal}]