Wolfram Research

Function Repository Resource:

Intrinsic3DCurve

Source Notebook

Plot intrinsic curves in 3D

Contributed by: Enrique Zeleny

ResourceFunction["Intrinsic3DCurve"][κ,τ,a,b,w,ds,n]

plot an intrinsic curve with curvature κ and torsion τ with parameters a and b and width w in discrete steps ds applied n times.

Details and Options

The French mathematicians Joseph Alfred Serret and Jean Frédéric Frenet found a way to represent a parametrized curve by intrinsic equations. At each point of the curve (parametrized by arc length), three mutually perpendicular unit vectors are defined (called a TNB frame). The tangent shows the direction of motion of the point, the normal points toward the direction in which the curve bends and the binormal is a vector perpendicular to both. Another two quantities are introduced: curvature to measure how quickly the curve is changing its direction and torsion to measure how quickly the curve is leaving the TN plane.
The starting point is {0,0,0}.
Options are the same as Graphics3D.

Examples

Basic Examples

A simple curve:

In[1]:=
ResourceFunction[
ResourceObject[
Association[
   "Name" -> "Intrinsic3DCurve", "ShortName" -> "Intrinsic3DCurve", "UUID" -> "a79b6ad1-ece7-450e-92bd-6154c8034ddd", "ResourceType" -> "Function", "Version" -> "1.0.0", "Description" -> "Plot intrinsic curves in 3D", "RepositoryLocation" -> URL[
     "https://www.wolframcloud.com/objects/resourcesystem/api/1.0"], "SymbolName" -> "FunctionRepository`$\
4f6f447e338c475dbe85d1181b322e0e`Intrinsic3DCurve", "FunctionLocation" -> CloudObject[
     "https://www.wolframcloud.com/objects/9fd4113b-7a96-4c51-ab7d-\
0f1c662dbd7f"]], ResourceSystemBase -> "https://www.wolframcloud.com/objects/\
resourcesystem/api/1.0"]][Sin, Cos, 5.5, 2.18, 0.015, 0.01, 2200]
Out[1]=

Increasing width, we get a ribbon-like surface (in fact, a ruled surface—the other edge has a displaced TNB frame):

In[2]:=
ResourceFunction[
ResourceObject[
Association[
   "Name" -> "Intrinsic3DCurve", "ShortName" -> "Intrinsic3DCurve", "UUID" -> "a79b6ad1-ece7-450e-92bd-6154c8034ddd", "ResourceType" -> "Function", "Version" -> "1.0.0", "Description" -> "Plot intrinsic curves in 3D", "RepositoryLocation" -> URL[
     "https://www.wolframcloud.com/objects/resourcesystem/api/1.0"], "SymbolName" -> "FunctionRepository`$\
4f6f447e338c475dbe85d1181b322e0e`Intrinsic3DCurve", "FunctionLocation" -> CloudObject[
     "https://www.wolframcloud.com/objects/9fd4113b-7a96-4c51-ab7d-\
0f1c662dbd7f"]], ResourceSystemBase -> "https://www.wolframcloud.com/objects/\
resourcesystem/api/1.0"]][Sin, Cos, 5.5, 2.18, 0.19, 0.01, 2200]
Out[2]=

With a constant function:

In[3]:=
ResourceFunction[
ResourceObject[
Association[
   "Name" -> "Intrinsic3DCurve", "ShortName" -> "Intrinsic3DCurve", "UUID" -> "a79b6ad1-ece7-450e-92bd-6154c8034ddd", "ResourceType" -> "Function", "Version" -> "1.0.0", "Description" -> "Plot intrinsic curves in 3D", "RepositoryLocation" -> URL[
     "https://www.wolframcloud.com/objects/resourcesystem/api/1.0"], "SymbolName" -> "FunctionRepository`$\
4f6f447e338c475dbe85d1181b322e0e`Intrinsic3DCurve", "FunctionLocation" -> CloudObject[
     "https://www.wolframcloud.com/objects/9fd4113b-7a96-4c51-ab7d-\
0f1c662dbd7f"]], ResourceSystemBase -> "https://www.wolframcloud.com/objects/\
resourcesystem/api/1.0"]][1 &, Sin, 1., 1., 0.3, 0.01, 1255]
Out[3]=

A higher constant function:

In[4]:=
ResourceFunction[
ResourceObject[
Association[
   "Name" -> "Intrinsic3DCurve", "ShortName" -> "Intrinsic3DCurve", "UUID" -> "a79b6ad1-ece7-450e-92bd-6154c8034ddd", "ResourceType" -> "Function", "Version" -> "1.0.0", "Description" -> "Plot intrinsic curves in 3D", "RepositoryLocation" -> URL[
     "https://www.wolframcloud.com/objects/resourcesystem/api/1.0"], "SymbolName" -> "FunctionRepository`$\
4f6f447e338c475dbe85d1181b322e0e`Intrinsic3DCurve", "FunctionLocation" -> CloudObject[
     "https://www.wolframcloud.com/objects/9fd4113b-7a96-4c51-ab7d-\
0f1c662dbd7f"]], ResourceSystemBase -> "https://www.wolframcloud.com/objects/\
resourcesystem/api/1.0"]][Sin, 3 &, 2.25, .5, 1., 0.073, 560]
Out[4]=

Possible Issues

A function varying rapidly needs small discrete steps to plot smoothly:

In[5]:=
ResourceFunction[
ResourceObject[
Association[
   "Name" -> "Intrinsic3DCurve", "ShortName" -> "Intrinsic3DCurve", "UUID" -> "a79b6ad1-ece7-450e-92bd-6154c8034ddd", "ResourceType" -> "Function", "Version" -> "1.0.0", "Description" -> "Plot intrinsic curves in 3D", "RepositoryLocation" -> URL[
     "https://www.wolframcloud.com/objects/resourcesystem/api/1.0"], "SymbolName" -> "FunctionRepository`$\
4f6f447e338c475dbe85d1181b322e0e`Intrinsic3DCurve", "FunctionLocation" -> CloudObject[
     "https://www.wolframcloud.com/objects/9fd4113b-7a96-4c51-ab7d-\
0f1c662dbd7f"]], ResourceSystemBase -> "https://www.wolframcloud.com/objects/\
resourcesystem/api/1.0"]][#^2 &, 10 &, 2.25, .5, 1., 0.01, 560]
Out[5]=

Avoid undefined values like Log[0]:

In[6]:=
ResourceFunction[
ResourceObject[
Association[
   "Name" -> "Intrinsic3DCurve", "ShortName" -> "Intrinsic3DCurve", "UUID" -> "a79b6ad1-ece7-450e-92bd-6154c8034ddd", "ResourceType" -> "Function", "Version" -> "1.0.0", "Description" -> "Plot intrinsic curves in 3D", "RepositoryLocation" -> URL[
     "https://www.wolframcloud.com/objects/resourcesystem/api/1.0"], "SymbolName" -> "FunctionRepository`$\
4f6f447e338c475dbe85d1181b322e0e`Intrinsic3DCurve", "FunctionLocation" -> CloudObject[
     "https://www.wolframcloud.com/objects/9fd4113b-7a96-4c51-ab7d-\
0f1c662dbd7f"]], ResourceSystemBase -> "https://www.wolframcloud.com/objects/\
resourcesystem/api/1.0"]][Log[# + .1] &, Sin, 2.25, .5, 1., 0.01, 600]
Out[6]=

Requirements

Wolfram Language 11.3 (March 2018) or above

Resource History

License Information