Function Repository Resource:

SeaShellSurface

Source Notebook

Get the parametrization of a seashell surface

Contributed by: Alfred Gray

ResourceFunction["SeaShellSurface"][γ,r,{t,θ}]

gives a parametrization of a seashell surface γ with variable radius r and parameters t and θ.

Details and Options

ResourceFunction["SeaShellSurface"] defines a "tube" of varying radius around a curve, which is taken to be a helix.
The parametrization has the form , where N and B are respectively the normal and the binormal of γ.
There is a great variety of seashell spiral shapes. They comprise an interesting class for studying the morphology of plants and animals.

Examples

Basic Examples (5) 

The parametrization of a helix:

In[1]:=
helix = Entity["SpaceCurve", "Helix"]["ParametricEquations"]
Out[1]=

Get the complete parametrization of a helical seashell surface:

In[2]:=
ResourceFunction["SeaShellSurface"][helix[a, b][t], c, {t, \[Theta]}]
Out[2]=

Plot the surface:

In[3]:=
ParametricPlot3D[
 Evaluate[
  ResourceFunction["SeaShellSurface"][
   helix[1, .6][t], .1, {t, \[Theta]}]], {t, \[Pi]/4, 5 \[Pi]}, {\[Theta], 0, 2 \[Pi]}, Boxed -> False, Axes -> None, PlotPoints -> 50, ViewPoint -> Front]
Out[3]=

Visualize the plot using Manipulate:

In[4]:=
Manipulate[
 ParametricPlot3D[
  Evaluate[
   ResourceFunction["SeaShellSurface"][helix[a, b][t], c, {t, \[Theta]}]], {t, \[Pi]/4, 5 \[Pi]}, {\[Theta], 0, 2 \[Pi]},
   Boxed -> False, Axes -> None, MaxRecursion -> 3, PlotStyle -> Opacity[op], Mesh -> None], {{a, 1.8}, .5, 2.}, {{b, .2}, .2, 2.}, {{c, .3}, .04, 1.}, {{op, .5}, .2, 1}]
Out[4]=

Create a dynamic version using DynamicModule in conjunction with Evaluate:

In[5]:=
DynamicModule[{a = 1.836`, b = 0.2`, c = 0.32499999999999996`}, ParametricPlot3D[
  Evaluate[
   ResourceFunction["SeaShellSurface"][helix[a, b][t], c, {t, \[Theta]}]], {t, \[Pi]/4, 5 \[Pi]}, {\[Theta], 0, 2 \[Pi]},
   Boxed -> False, Axes -> None, MaxRecursion -> 3]]
Out[5]=

Properties and Relations (5) 

Nordstrand's version:

In[6]:=
g = With[{a = 0.2, b = 1, c = 0.1, n = 2}, ParametricPlot3D[{((1 - v/(2 \[Pi])) (1 + Cos[u]) + c) Cos[
      n v], ((1 - v/(2 \[Pi])) (1 + Cos[u]) + c) Sin[n v], (b v)/(
     2 \[Pi]) + a Sin[u] (1 - v/(2 \[Pi]))}, {u, 0, 2 \[Pi]}, {v, 0, 2 \[Pi]}, Boxed -> False, PlotPoints -> {25, 100}, Axes -> False, PlotRange -> All, ViewPoint -> {0, -2, 0.2}, BoxRatios -> {1, 1, 1}]]
Out[6]=

Upright conical spiral (models by S. Dickson):

In[7]:=
ParametricPlot3D[{2 (1 - Exp[u/(6 \[Pi])]) Cos[u] Cos[v/2]^2, 2 (-1 + Exp[u/(6 \[Pi])]) Sin[u] Cos[v/2]^2, 1 - Exp[u/(3 \[Pi])] - Sin[v] + Exp[u/(6 \[Pi])] Sin[v]}, {u, 0, 6 \[Pi]}, {v, 0, 2 \[Pi]}, Boxed -> False, PlotPoints -> {100, 25}, Axes -> False, PlotRange -> All, ViewPoint -> {0, 2, 1}]
Out[7]=

Upright conical spiral with gradual slope:

In[8]:=
X = 2 (-1 + E^(u/(6 \[Pi]))) Cos[u] Cos[v/2]^2;
In[9]:=
Y = 2 (-1 + E^(u/(6 \[Pi]))) Cos[v/2]^2 Sin[u];
In[10]:=
Z = 1/2 - 1/2 E^(u/(3 \[Pi])) - Sin[v] + E^(u/(6 \[Pi])) Sin[v];
In[11]:=
ParametricPlot3D[{X, Y, Z}, {u, 0, 6 \[Pi]}, {v, 0, 2 \[Pi]}, PlotPoints -> {100, 20}, PlotRange -> All, Axes -> False, Boxed -> False]
Out[11]=

Cross-section of flat conical spiral:

In[12]:=
X = 2 (-1 + E^(u/(6 \[Pi]))) Cos[v/
    2]^2 (Cos[u] Cos[1/2 Sin[2 v]] + Sin[u] Sin[1/2 Sin[2 v]]);
In[13]:=
Y = 2 I (-1 + E^(u/(6 \[Pi]))) Cos[v/
    2]^2 (-I Cos[1/2 Sin[2 v]] Sin[u] + I Cos[u] Sin[1/2 Sin[2 v]]);
In[14]:=
Z = (-1 + E^(u/(6 \[Pi]))) Sin[v];
In[15]:=
ParametricPlot3D[{X, Y, Z}, {u, 0, 6 \[Pi]}, {v, -\[Pi], 0}, Axes -> False, Boxed -> False, ViewPoint -> {3.6305, -0.2046, 1.8322}, PlotPoints -> {108, 14}, PlotRange -> All]
Out[15]=

Wolfram's model:

In[16]:=
With[{a = 1.2, b = 2, c = 1.5, d = 1, e = 1.2}, ParametricPlot3D[
  a^t {Cos[
      t] (1 + c (Cos[e] Cos[\[Theta]] + (d Sin[e]) Sin[\[Theta]])), Sin[t] (1 + c (Cos[e] Cos[\[Theta]] + (d Sin[e]) Sin[\[Theta]])), b + c (Cos[\[Theta]] Sin[
          e] - (d Cos[
            e]) Sin[\[Theta]])}, {\[Theta], -\[Pi], \[Pi]}, {t, -25, 0}, PlotPoints -> 80,
  PlotStyle -> Directive[Opacity[1 - .5], Lighter[Yellow, 0.3], Specularity[White, 10]], Axes -> None, ViewPoint -> {1, 1, -3}, Boxed -> False, PlotRange -> All, Mesh -> None]]
Out[16]=

Publisher

Enrique Zeleny

Version History

  • 1.0.0 – 27 March 2020

Source Metadata

License Information