Function Repository Resource:

FrenetSerretPlot

Source Notebook

Plot the Frenet–Serret frame of a curve

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

ResourceFunction["FrenetSerretPlot"][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["FrenetSerretPlot"] 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["FrenetSerretPlot"][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["FrenetSerretPlot"][eight[t], tf, {t, 0, 2 \[Pi]}, PlotRange -> 1.5], {tf, 0, 2 \[Pi]}]
Out[3]=

Viviani’s curve:

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

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

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

Options (4) 

ScaleFactor (1) 

Modify the length of vectors:

In[6]:=
Module[{tf = 4}, Show[ResourceFunction[
   "FrenetSerretPlot"][{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[6]=

FrameStyle (1) 

Change the style of vectors:

In[7]:=
Module[{tf = 4}, Show[ResourceFunction[
   "FrenetSerretPlot"][{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[7]=

FrameText (1) 

Change the text for vectors of the frame:

In[8]:=
Module[{tf = 4}, Show[ResourceFunction[
   "FrenetSerretPlot"][{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[8]=

FrameTextPosition (1) 

Adjust text position:

In[9]:=
Module[{tf = 4}, Show[ResourceFunction[
   "FrenetSerretPlot"][{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[9]=

Publisher

Enrique Zeleny

Version History

  • 1.0.0 – 11 November 2020

Related Resources

License Information