Seashells: the plainness and beauty of their mathematical description

3. The complete model

In case we want to add nodules, bumps and spikes to the shell, it suffices to include some additional parameters [1], illustrated in the following picture:

and further

From [M. B. Cortie, Modelling the surface bumps and spikes of molluscan shells, in: Proceedings of the First International Conchology Conference (Ed. C.R. Illert), Hadronic Press, Palm Harbor, 1995, pp. 46-65], if a surface sculpture term is superimposed in the generating ellipse C, it suffices to replace the equation re(s) of C by where, in case W1=0 or W2=0 or N=0, and, in case W1, W2 and N are nonzero, with

Important note: this model contains the previous case of shells with no nodules; it suffices to make L=0.

Based on the above description, the parametric equations of the shell depend on 14 parameters

(the latter four are only of relevance in case L is nonzero).

Varying parameters L, P, W1, W2 and N changes significantly the shape of the shell. In order to understand better the effect of these new parameters in the shape of the shell, see the following interactive applets in the web page of the Portuguese project Atractor (of popularization of mathematics) [10]:

Finally, the dimensions:

The parameters d and sd determine the resolution of the generated shell (for example, if the shell contains nodules that are thin and long we have to use very small d and sd values in order to shape the nodules).

Implementation of the model

The implementation of this model with Mathematica can be effected in the following way (since the XYZ referential we use in our model has opposite orientation to the one used by Mathematica, we change the sign in coordinate y):

l[n_][theta_] = (2Pi/n)((n theta/2Pi) - IntegerPart[n theta/2Pi]);

k[a_,b_,ll_,p_,w1_,w2_,n_][s_,theta_] = If[w1=0||w2=0||n=0,0, ll Exp[-(2(s-p)/w1)^2-(2l[n][theta]/w2)^2]];

h[a_,b_,ll_,p_,w1_,w2_,n_][s_,theta_] = (1/(Sqrt[(Cos[s]/a)^2+(Sin[s]/b)^2])) + k[a_,b_,ll_,p_,w1_,w2_,n_][s_,theta_];

x[d_,aa_,beta_,phi_,omega_,mu_,alpha_,a_,b_,ll_,p_,w1_,w2_,n_][theta_,s_] =

      d(aa Sin[beta] Cos[theta] + h[a,b,ll,p,w1,w2,n][s,theta]

             (Cos[s+phi] Cos[theta+omega] - Sin[mu] Sin[s+phi] Sin[theta+omega])) Exp[theta Cot[alpha]];

y[aa_,beta_,phi_,omega_,mu_,alpha_,a_,b_,ll_,p_,w1_,w2_,n_][theta_,s_] =

      (-aa  Sin[beta] Sin[theta] - h[a,b,ll,p,w1,w2,n][s,theta]

             (Cos[s+phi] Sin[theta+omega] + Sin[mu] Sin[s+phi] Cos[theta+omega] ))Exp[theta Cot[alpha]];

z[aa_,beta_,phi_,mu_,alpha_,a_,b_,ll_,p_,w1_,w2_,n_][theta_,s_] =
      (-aa  Cos[beta] + h[a,b,ll,p,w1,w2,n][s,theta] Sin[s+phi] Cos[mu]) Exp[theta Cot[alpha]];






                  {theta, -4Pi, 4Pi}, {s, 0 Degree, 360 Degree},

                  Boxed -> False, Axes -> False, PlotPoints -> {100,20}, PlotRange -> All, ViewPoint -> {-1,-3,0.5}]]

[1] M. B. Cortie, Digital seashells, Comput. & Graphics 17 (1993) 79-84.

Next: 4. Index of examples | Back to Index