0
$\begingroup$

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.

$\endgroup$
3
$\begingroup$

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
 ]

Mathematica graphics

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
 ]

Mathematica graphics

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

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}]

enter image description here

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.