Function Repository Resource:

FrenetSerretFrame

Source Notebook

Plot the Frenet-Serret frame of a curve

Contributed by: Wolfram Staff (original content by Alfred Gray)

ResourceFunction["FrenetSerretFrame"][c,t0,{t,tmin,tmax}]

plots the curve c with parameter t from tmin to tmax, with the Frenet-Serret frame for c at t0.

Details and Options

ResourceFunction["FrenetSerretFrame"] has the same options as ParametricPlot3D.

Examples

Basic Examples (2) 

A figure eight:

In[1]:=
eight[t_] := {Cos[t], Cos[t] Sin[t]}

The Frenet–Serret frame:

In[2]:=
ResourceFunction["FrenetSerretFrame"][eight[t], .5, {t, 0, 2 \[Pi]}, PlotRange -> 1.1]
Out[2]=

See how the system changes as t0 is varied:

In[3]:=
Manipulate[
 ResourceFunction["FrenetSerretFrame"][eight[t], tf, {t, 0, 2 \[Pi]}, PlotRange -> 1.5], {tf, 0, 2 \[Pi]}]
Out[4]=

Viviani’s curve:

In[5]:=
viviani = Entity["SpaceCurve", "VivianiCurve"]["ParametricEquations"][1][t]/2
Out[5]=

Viviani’s curve with an animation of the tangent, normal and binormal moving along the curve:

In[6]:=
Manipulate[
 Show[ResourceFunction["FrenetSerretFrame"][viviani, tf, {t, 0, 4 \[Pi]}, PlotRange -> 1.5], Graphics3D[{Opacity[.5], Sphere[]}]], {{tf, 2}, 0, 4 \[Pi]}]
Out[6]=

Options (4) 

ScaleFactor (1) 

Modify the length of vectors:

In[7]:=
Module[{tf = 4}, Show[ResourceFunction[
   "FrenetSerretFrame"][{1/2 (1 + Cos[t]), Sin[t]/2, Sin[t/2]}, tf, {t, 0, 4 \[Pi]}, PlotRange -> 1.75, "ScaleFactor" -> 1],
  Graphics3D[{Opacity[0.5`], Sphere[]}]]]
Out[7]=

FrameStyle (1) 

Change the style of vectors:

In[8]:=
Module[{tf = 4}, Show[ResourceFunction[
   "FrenetSerretFrame"][{1/2 (1 + Cos[t]), Sin[t]/2, Sin[t/2]}, tf, {t, 0, 4 \[Pi]}, PlotRange -> 1.5, "FrameStyle" -> {Directive[Dashed], Directive[Red, Dashing[0], Thick], Directive[Yellow]}], Graphics3D[{Opacity[0.5`], Sphere[]}]]]
Out[8]=

FrameText (1) 

Change the text for vectors of the frame:

In[9]:=
Module[{tf = 4}, Show[ResourceFunction[
   "FrenetSerretFrame"][{1/2 (1 + Cos[t]), Sin[t]/2, Sin[t/2]}, tf, {t, 0, 4 \[Pi]}, PlotRange -> 1.5, "FrameText" -> {"1", "2", "3"}],
  Graphics3D[{Opacity[0.5`], Sphere[]}]]]
Out[9]=

FrameTextPosition (1) 

Adjust the text position:

In[10]:=
Module[{tf = 4}, Show[ResourceFunction[
   "FrenetSerretFrame"][{1/2 (1 + Cos[t]), Sin[t]/2, Sin[t/2]}, tf, {t, 0, 4 \[Pi]}, PlotRange -> 1.5, "FrameTextPosition" -> -{0.25, 0.25, 0.25}],
  Graphics3D[{Opacity[0.5`], Sphere[]}]]]
Out[10]=

Publisher

Enrique Zeleny

Version History

  • 1.0.0 – 21 September 2020

Related Resources

License Information