(* "RomBoy Deformation" (c) 1992 Stewart Dickson The metamorphosis (or homeotopy) of Steiner's "Quartic" or "Roman" Surface into the Boy surface. From : Francis, George ; "A Topological Picturebook", New York : Springer - Verlag, 1987. "Figure Eight", pp . 95 - 98. *)
Needs["Graphics`ThreeScript`"] ;
SetOptions[Graphics3D, Background -> RGBColor[0, 0, 0], Boxed -> False, PlotRange -> All, RenderAll -> True] ;
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] ] ] ;
(* radii : *) r1 = r2 = 0.5 ;
(* sliding parameter b : 0.0 -> Roman surface b = 1.0 / (3 ^ (1/2)) ; -> all pinch points cancelled b = 1.0 ; -> a good picture of the Boy surface *)
Z1 = { r1 Cos[2 theta], r1 Sin[2 theta], 1 } ; Z2 = { r2 Cos[theta], -r2 Sin[theta], 0 } ; A = 1 / (1 + phi ^ 2) ; B = A (phi + 1.125 * phi ^ 2 + (phi ^ 3) / 128 ) ;
(* For a more uniform parametric mesh, purturb phi : *) phi := N[Tan[tau]]
b = 0 ; venusPolys1 = MakePolygons[Table[N[Z1 A + B Z2], {tau, 0, (Pi / 2) - 0.08, Pi / 20}, {theta, 0, 2 Pi, Pi / 20}]] ;
venusPolys2 = MakePolygons[Table[N[-Z1 A - B Z2], {tau, 0, (Pi / 2) - 0.08, Pi / 20}, {theta, 0, 2 Pi, Pi / 20}]] ;
venusOut = Graphics3D[ { venusPolys1, venusPolys2 } ] ;
Show[venusOut]
- Graphics3D -
ThreeScript["VenusGeom3.3s", venusOut] ;