(* Stewart Dickson's Nautilus (c) 1990 *)
X = (-1 + E^(u/(6*Pi)))*Sin[v]
Y = (-1 + E^(u/(6*Pi)))*(1 + Cos[v])*Sin[u - Sin[2*v + Pi/2]/2]
Z = (-1 + E^(u/(6*Pi)))*(1 + Cos[v])*Cos[u - Sin[2*v + Pi/2]/2]

VecLen[{x_, y_, z_}] := Sqrt[N[x ^2 + y ^2 + z ^2]];
Cross[u_List, v_List] := Det[{{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, u, v}];

MakePolygons[vl_List] :=
    Block[{l = vl,
           l1 = Map[RotateLeft, vl],
           mesh},
        mesh = {l, RotateLeft[l], RotateLeft[l1], l1};
        mesh = Map[Drop[#, -1]&, mesh, {1}];
        mesh = Map[Drop[#, -1]&, mesh, {2}];
        Polygon /@ Transpose[ Map[Flatten[#, 1]&, mesh] ]
    ]

nautilus = MakePolygons[Table[{X, Y, Z},
	{u, 3 Pi, 6 Pi, Pi / 12}, {v, 0, 2 Pi, Pi / 12}]]

centerview = {1.8624, 1.5762, 2.3445};

centerline = {0.0, 0.0, -1.0};
eyeline = Cross[centerline, centerview];
ueyeline = eyeline / VecLen[eyeline];
viewdist = VecLen[centerview];
eyedist = viewdist / 24;
leftview = centerview + eyedist * ueyeline;
rightview = centerview - eyedist * ueyeline;

leftplot = Graphics3D[nautilus, Lighting->True,
	Boxed->False, ViewPoint -> leftview, PlotRange->All,
	AspectRatio->.47,
   LightSources -> 
    {{{0.7071, 0, 0.7071}, RGBColor[1, 0, 0]}, 
     {{0.5773, 0.5773, 0.5773}, RGBColor[0, 1, 0]}, 
     {{0, 0.7071, 0.7071}, RGBColor[0, 0, 1]}}]
Display["nautilus_left.ps", leftplot]

rightplot = Graphics3D[nautilus, Lighting->True,
	Boxed->False, ViewPoint -> rightview, PlotRange->All,
	AspectRatio->.47,
   LightSources -> 
    {{{0.7071, 0, 0.7071}, RGBColor[1, 0, 0]}, 
     {{0.5773, 0.5773, 0.5773}, RGBColor[0, 1, 0]}, 
     {{0, 0.7071, 0.7071}, RGBColor[0, 0, 1]}}]
Display["nautilus_right.ps", rightplot]
