# Frenet frame as basis in a product

Let $\gamma (t)$ be an embedded curved in $\mathbb{R}^3$ and let $T(t),\ N(t)$ and $B(t)$ be its Frenet frame. Let C be a unit circle (or another closed embedded curve in $\mathbb{R}^3$) and fix a point on $C$, say $C(0)$. We glue at every point of $\gamma(t)$ the curve $C$ at point $C(0)$ such that $N(t)$ is tangent to $C$ and $B(t)$ is normal. This will produce a (not necessarily embedded) surface in $\mathbb{R}^3$. Given $\gamma$ and $C$ how do we plot in Mathematica this construction?

More generally, how can we plot this without fixing the point C(0).I.e. given two Jordan curves $\gamma$ and $C$ we declare that the tangent, normal and binormal of $\gamma$ are, respectively, the normal, binormal and tangent of $C$. How do we plot this, given $\gamma$ and $C$?

Thank you.

In the first paragraph of the OP, it says the normal $N(t)$ of $\gamma$ should be tangent to $C$ and in the second, it says the normal should be the binormal. I went with the first one. The OP also asks how to do this without fixing the base point $C(0)$. I don't know what that means. You could have the base point depend on $t$ or $\gamma(t)$ by using $C(u(t))$ instead of $C(0)$ (or cc[c0] in the code below).

The idea is simple enough: A Frenet frame can be viewed as a rotation matrix, so all you need to do is rotate and translate $C$ into place on $\gamma$, using the frames of the two curves.

(* the curve gamma *)
gg[t_] := {5 Cos[t], 5 Sin[t], 3 ArcTan[t]};
gFSF[t_] = Simplify@Last@FrenetSerretSystem[gg[t], t];

(* the curve C *)
Clear[cFSF];
pts = {{0, 0, 1}, {1, -1, 0}, {2, 0, 1}, {3, 2, 0}, {1, 3, -1}, {0, 2,
0}, {-1, 1, 1}(*,{0,0,1}*)};
cc = BSplineFunction[pts, SplineClosed -> True];
cFSF[t0_?NumericQ] := Append[#, Cross @@ #] &[  (* FrenetSerretSystem sometimes failed *)
Table[Indexed[Derivative[n][cc][t], k], {n, 2}, {k, 3}] /.
t -> t0] // Orthogonalize;
c0 = 0.95;             (* cc[c0] = C(0), base point *)
cFSF0 = cFSF[c0];      (* Frenet frame at base point *)
Show[
ParametricPlot3D[(cc[t] - cc[c0]), {t, 0, 1},
MeshFunctions -> {#4 &}, Mesh -> {{c0}}, AxesLabel -> {x, y, z}],
Graphics3D[{Thick,
MapThread[{#2, Arrow[{0 cc[c0], 0 cc[c0] + #}]} &, {cFSF0, {Blue,
Orange, Darker@Green}}]}],
PlotRange -> All
]


Show[
ParametricPlot3D[gg[t], {t, -2 Pi, 2 Pi},
PlotStyle -> {Thick, Red}],
ParametricPlot3D[
gg[t] + Transpose@gFSF[t].RotateRight@cFSF0.(cc[s] - cc[c0]),
{t, -2 Pi, 2 Pi}, {s, 0, 1}, Mesh -> {40, 0}],
PlotRange -> 8, ImageSize -> 300, SphericalRegion -> True
]


• thank you for this instructive answer. I still have difficulty understanding the aim of the question but have learned a lot from your answer:) – ubpdqn May 13 '17 at 5:54
• Thank you. It answers my question very well. – Vladimir May 18 '17 at 13:39

I am not sure I have completely understood but perhaps this is a start:

f[t_] := {Cos[t], Sin[t], t}
{tg, n, b} = FullSimplify[FrenetSerretSystem[f[t], t][[2]]];
su[u_] := {n, b} /. t -> u
pp = ParametricPlot3D[f[t], {t, 0, 2 Pi}];
Manipulate[
Show[Graphics3D[
Polygon@Table[
f[par] + d {Cos[j] + 1, Sin[j]}.su[par], {j, 0, 2 Pi, 0.1}]], pp,
AspectRatio -> Automatic,
PlotRange -> {{-2, 2}, {-2, 2}, {0, 7}}], {par, 0, 2 Pi}, {d, 0.1,
1}]


• Thank you, this is very useful. – Vladimir May 18 '17 at 13:39