Contents

Minimal surfaces are surfaces that span an arbitrarily shaped boundary with minimal surface area. For example, surface tension can cause soap films to form minimal surfaces. These surfaces can be very beautiful.
Gyroid  Mathematica 4.2, POVRay 3.6.1, 3/25/11
You can purchase this as a poster, a tie, or a printed fabric pattern.
The Gyroid is a type of triply periodic minimal surface that was discovered by Alan Schoen in 1970. It can be approximated by a simple isosurface defined by cos(x)sin(y) + cos(y)sin(z) + cos(z)sin(x) = 0. The surface patterns in this image are actually artifacts that were created as a result of lowering the max_gradient parameter in POVRay. The colors remind me of Yellowstone's hot spring pools. Here is some Mathematica code:
(* runtime: 8 seconds *)
<< Graphics`ContourPlot3D`;
ContourPlot3D[Cos[x]Sin[y] + Cos[y]Sin[z] + Cos[z]Sin[x], {x, 5, 5}, {y, 5, 5}, {z, 5, 5}, Contours > {0}, PlotPoints > 6, ViewPoint > {1, 1, 1}]
and here is some POVRay code:
// runtime: 4 seconds
camera{location 10 look_at 0}
light_source{10,1}
isosurface{function{cos(x)*sin(y)+cos(y)*sin(z)+cos(z)*sin(x)} threshold 0 max_gradient 2 contained_by{sphere{<0,0,0>,7}} open pigment{rgb 1}}
Links
Gyroid Labyrinth Graph  by EPINET project
Order 2 Gyroid, Order 3 Gyroid  Mathematica code for the exact parametric formula, by Matthias Weber
Steel Gyroid  by Florian Sanwald
Triple Gyroid Sphere  by Stijn van der Linden
Gyroid  a popular 3D metal printed piece, by Bathsheba Grossman
Gyroid  MathWorld article

ScherkCollins Surface  Mathematica 4.2, POVRay 3.6.1, old version: 7/19/06, new version: 2/10/09
This surface can be formed by twisting and warping a singlyperiodic Scherk’s minimal surface. This idea was originally attributed to Brent Collins. Technically, the surface is no longer considered exactly "minimal" after twisting but it still looks minimal (it is actually very difficult to find the exact shape for most minimal surfaces). Click here to download some POVRay code and here for some AutoLisp code. Here is some Mathematica code:
(* runtime: 0.3 second *)
<< Graphics`Master`; n = 5; r = 0.75n;
Twist[{x_, y_, z_}, theta_] := {x Cos[theta]  y Sin[theta], x Sin[theta] + y Cos[theta], z};
Warp[{x_, y_, z_}, theta_] := {(x + r) Cos[theta], (x + r) Sin[theta], y};
f[z_] := Module[{t1 = Sqrt[2Cot[z]], t2 = Cot[z] + 1}, Warp[Twist[Re[{0.5xsign(Log[t1  t2]  Log[t1 + t2])/Sqrt[2], ysign I(ArcTan[1  t1]  ArcTan[1 + t1])/Sqrt[2], z}], 2Re[z]/n], 2Re[z]/n]];
DisplayTogether[Table[ParametricPlot3D[f[x + I y], {x, 0, n Pi}, {y, 0.001, 0.75}, PlotPoints > {8n + 1, 5}, Compiled > False], {xsign, 1, 1, 2}, {ysign, 1, 1, 2}]]
The following Mathematica code can be used to increase the number of edges (or "branches"). This code uses some complicated functions that were adapted from Matthias Weber's Mathematica notebook:
(* runtime: 1.2 seconds *)
<< Graphics`Shapes`; k = 4; phi = Pi(0.6/k  0.5)/(1  k);
f[z_] := Re[NIntegrate[Evaluate[{0.5 (w^(1  k)  w^(k  1)), 0.5 I (w^(1  k) + w^(k  1)), 1}/(w^(k + 1) + w^(1  k)  2w Cos[k phi])], {w, 0, z}]];
alpha = Pi/k; zbeta = Exp[I Pi(phi/alpha  0.5)];
surface = ParametricPlot3D[Re[f[Exp[I alpha/2]((1 + I zbeta Exp[r + I theta])/(I Exp[r + I theta] zbeta))^(alpha/Pi)]], {r, 0, 4}, {theta, 0, Pi}, PlotPoints > 10, Compiled > False, DisplayFunction > Identity][[1]];
z0 = f[1][[3]]; surface = {surface, AffineShape[TranslateShape[surface, {0, 0, 2z0}], {1, 1, 1}]};
surface = {surface, AffineShape[surface, {1, 1, 1}]}; surface = Table[RotateShape[surface, 2Pi i/k, 0, 0], {i, 1, k}];
dz = Pi Csc[k phi]/k; Show[Graphics3D[Table[TranslateShape[surface, {0, 0, i dz}], {i, 0, 1}]]]
Links
“Whirled White Web”  a beautiful snow sculpture by Brent Collins
Sculpture Generator  C++ program for ScherkCollins surfaces by Carlo Séquin

Punctured Helicoid  Mathematica 4.2, POVRay 3.6.1, 1/13/09
Here is a helicoid with holes in it. This image was printed on the cover of McGrawHill's 2012 & 2013 Algebra1 textbooks. The following Mathematica code uses some complicated functions that were adapted from Matthias Weber's Mathematica notebook:
(* runtime: 4 seconds *)
<< Graphics`Shapes`;
tau0 = Exp[1.23409 I]; b0 = 0.629065; theta[z_] := EllipticTheta[1, Pi z, Exp[I Pi tau0]];
r1[z_] := theta[z + 0.5 (b0  2) (tau0 + 1)]/theta[z + 0.5 (b0  1) (tau0 + 1)]; r2[z_] := theta[z  0.5 b0 (tau0 + 1)]/theta[z  0.5 (b0 + 1) (tau0 + 1)];
omega3[z_] := r1[z] r2[z]/(0.386191  0.169839 I); G[z_] := (108.37  62.8417 I) Exp[I Pi (b0  2 z + 2 tau0 + b0 tau0)]r1[z]/r2[z];
f[z0_] := Re[NIntegrate[Evaluate[{(G[z] omega3[z]  omega3[z]/G[z] )/2, I(G[z] omega3[z] + omega3[z]/G[z] )/2, omega3[z]}], {z, tau0/2, z0}]] + {0.434156, 0, 1};
a0 = 0.409956; r0 = 2.43051; g[z_] := (EllipticF[ArcSin[(a0 + r0 E^z)/(1  a0 E^z)], 1/r0^2]/(2EllipticF[Pi/2, 1/r0^2]) + 0.5)(1 + tau0)/2;
surface = ParametricPlot3D[f[g[x + I y]], {x, 2.5, 2.5  0.8881}, {y, 0.001,0.999Pi}, PlotPoints > {15, 10}, Compiled > False, DisplayFunction > Identity][[1]];
surface = {surface, RotateShape[surface, 0, 0, Pi]};
Show[Graphics3D[{surface, TranslateShape[surface, {0, 0, 2}]}, ViewPoint > {1, 6, 3}]]

Catenoid/Helicoid  POVRay 3.6.1, 1/8/09
When soap film is applied over a helical spring, it usually takes the form of a minimal surface called a helicoid. However, it is also possible for the soap film to form a different minimal surface which is a cross between a catenoid and a helicoid. The left image shows one such catenoid/helicoid that has been warped around a circle. Click here to download some POVRay code and here for some AutoLisp code. Here is some Mathematica code:
(* runtime: 0.6 second *)
x := Sin[alpha]Cosh[v]; y := Cos[alpha]Sinh[v];
Do[ParametricPlot3D[{x Cos[u] + y Sin[u], x Sin[u]  y Cos[u], u Cos[alpha] + v Sin[alpha]}, {u, 0, 2Pi}, {v, 2.25, 2.25}, PlotPoints > {36, 10}], {alpha, Pi/2, Pi/2, Pi/18}];
Links
Venice Museum Bridge  bridge proposal, by Eric Worcester
Marina Bayfront Pedestrian Bridge  doublehelix bridge in Singapore
Soap Film Coil Photos  by John Oprea
Soap Film Coil Photo  by the Exploratorium

Costa’s Minimal Surface  Mathematica 4.2, POVRay 3.6.1, 4/3/05
Costa's minimal surface is a classic example of a minimal surface with holes in it, also called "handles". The number of holes is called the genus of the surface. Costa was a graduate student when he discovered this surface. They say he resolved the equation in his dreams. Here is some Mathematica code:
(* runtime: 5 seconds *)
Costa[z_] := Module[{phi1 = 2 Sqrt[z] Sqrt[1  z^2] Hypergeometric2F1[1/4, 3/2, 5/4, z^2]/Sqrt[z^2  1], phi2 = (2/3) z^(3/2) Sqrt[z^2  1] Hypergeometric2F1[3/4, 1/2, 7/4, z^2]/Sqrt[1  z^2]}, Re[{phi2  phi1, I(phi1 +phi2), Log[z  1]  Log[z + 1]}]/2];
surface = ParametricPlot3D[Costa[Sqrt[Exp[r  I theta] + 1]], {r, 3.5, 6}, {theta, Pi, Pi}, PlotPoints > {20, 18}, Compiled > False][[1]];
<< Graphics`Shapes`; surface = {surface, RotateShape[surface, Pi, 0, 0]}; Show[Graphics3D[{surface, RotateShape[surface, Pi/2, Pi, 0]}]]
Here is another parametrization:
(* runtime: 5 seconds *)
c = 189.07272; e1 = 6.87519;
Costa[u_, v_] := Module[{z =u + I v}, zeta = WeierstrassZeta[z, {c, 0}]; zeta1 = WeierstrassZeta[z  1/2, {c, 0}]; zeta2 = WeierstrassZeta[z  I/2, {c, 0}]; p = WeierstrassP[z, {c, 0}]; x = Re[Pi (u + Pi/(4 e1) )  zeta + Pi(zeta1  zeta2)/(2 e1)]/2; y = Re[Pi (v + Pi/(4 e1))  I(zeta + Pi(zeta1  zeta2)/(2 e1))]/2; z = (Sqrt[2 Pi]/4)Log[Abs[(p  e1)/(p + e1)]]; {x, y, z, EdgeForm[]}];
ParametricPlot3D[Costa[u, v], {u, 0.0001, 1}, {v, 0.0001, 1}, PlotPoints > 40, PlotRange > {{3.5, 3.5}, {3.5, 3.5}, {2, 2}},Compiled > False]
Links
Topology of Costa's Minimal Surface  homotopy that continuously maps a torus into Costa's surface, by Stewart Dickson
Mathematica code and minimal surface art  by Matthias Weber
Alfred Gray  differential geometry gallery
soap bubble light interference  by Kei Iwasaki
Eva Hild  beautiful ceramic sculptures
minimal surfaces with metal frames
Helaman Ferguson  math sculptor, see his Costa snow sculpture

Naturally Formed Costa’s Minimal Surface  Paint Film on 3D Printed Nylon Boundary, 2/3/14
For many years, I have wanted to see if Costa’s minimal surface could be naturally formed using soap film. Here is my first attempt to accomplish this by dipping a 3D printed boundary into paint that behaves like soap film. Unfortunately, the boundary became distorted by the film's surface tension. More to come soon...
Links
Making a Modified Costa Surface with Soap Film  by Andrew Bayly

Higher Genus Costa’s Minimal Surfaces  Mathematica 4.2, POVRay 3.6.1, 6/28/10
The following Mathematica code can be used to increase the number of holes. This code uses some complicated functions that were adapted from Matthias Weber's Mathematica notebook:
(* runtime: 1.2 seconds *)
n = 5; psi1[z_] := n z^(1/n) Hypergeometric2F1[0.5/n, 1 + 1/n, 1 + 0.5/n, z^2]; psi2[z_] := (n/(2 n  1)) z^(2  1/n) Hypergeometric2F1[1  0.5/n, 1  1/n, 2  0.5/n, z^2];
rho = Sqrt[4^(1/n)Gamma[1  0.5/n] Gamma[(n + 1)/(2 n)]/(Gamma[1 + 0.5/n] Gamma[(n  1)/(2 n)])]; f[z_] := 0.5Re[{psi2[z]/rho  rho psi1[z], I (psi2[z]/rho + rho psi1[z]), Log[(z  1)/(z + 1)]}];
surface = ParametricPlot3D[f[Sqrt[Exp[x + I y] + 1]], {x, 3, 6}, {y, 1.0*^6, Pi}, PlotPoints > {30, 15}, Compiled > False, DisplayFunction > Identity][[1]];
<< Graphics`Shapes`; surface = {surface, RotateShape[surface,Pi/n, Pi, 0]}; surface = {surface, AffineShape[surface, {1, 1, 1}]};
Show[Graphics3D[Table[RotateShape[surface, 2Pi i/n, 0, 0], {i, 1, n}]]];

Triple Bubbles  Mathematica 4.2, POVRay 3.6.1, 7/*/10
Fourth Enneper Surface  Mathematica 4.2, POVRay 3.6.1, 6/4/05
Click here to download some POVRay code for this image and here for some AutoLisp code. Here is some Mathematica code for the Second Enneper surface:
(* runtime: 0.5 second *)
n = 3; ParametricPlot3D[{r Cos[phi]  r^(2n  1) Cos[(2n  1) phi]/(2n  1), r Sin[phi] + r^(2n  1) Sin[(2n  1) phi]/(2n  1), 2 r^n Cos[n phi]/n, EdgeForm[]}, {phi, 0, 2Pi}, {r, 0, 1.3}, PlotPoints > {181, 20}, ViewPoint > {0, 0, 1}, PlotRange > All]
Links
Enneper Mathematica Notebook
Enneper Snow Sculpture

ChenGackstatter Minimal Surface  POVRay 3.6.1, 2/25/09
This modified Enneper surface has holes in it. The following Mathematica code uses some functions that were adapted from Matthias Weber's Mathematica notebook:
(* runtime: 0.4 second *)
<< Graphics`Shapes`; k = 5; n = (k  1)/k; rho = 1.0/Sqrt[4^n Gamma[(3  n)/2] Gamma[1 + n/2]/(Gamma[(3 +n)/2]Gamma[1  n/2])];
phi[n_, z_] := z^(n + 1)Hypergeometric2F1[(n + 1)/2, n, (n + 3)/2, z^2]/(n + 1); f[z_] := {0.5(phi[n, z]/rho  rho phi[n, z]), 0.5I(rho phi[n, z] + phi[n, z]/rho), z};
surface = ParametricPlot3D[Re[f[r Exp[I theta]]], {r, 0, 2}, {theta, 1*^6, 2Pi}, PlotPoints > {9, 33}, Compiled > False, DisplayFunction > Identity][[1]];
Show[Graphics3D[Table[RotateShape[surface, 0, 0, 2Pi i/k], {i, 0, k  1}]]]

Giant Bubble  3/20/05
We made these giant soap films at the Children’s Museum. Due to surface tension, the sides of these soap films would slowly shrink inward to form a minimal surface called a catenoid:
(* runtime: 4 seconds *)
r := Cosh[z];
ParametricPlot3D[{r Cos[theta], r Sin[theta], z, {EdgeForm[], SurfaceColor[Hue[theta/(2Pi)]]}}, {theta, 0, 2Pi}, {z, 2,2}, Axes > False, Boxed > False, PlotPoints > {73, 51}];
Bubble Links
Bubble Records  impressive bubbles by Fan Yang
Zubbles  colored bubbles
Maarten Rutgers  uses soap films like 2D wind tunnels, see his soap film vortices and 50' soap film
antibubbles  interesting
Double Bubbles and Polytope Bubbles by John Sullivan
nice rendering of bubbles

JorgeMeeks KNoids  POVRay 3.6.1, 1/16/09
The following Mathematica code uses some functions that were adapted from Matthias Weber's Mathematica notebook:
(* runtime: 0.4 second *)
<< Graphics`Shapes`;
k = 5; phi1[z_] := z^(k  1) (k/(1  z^k)  (k  1) LerchPhi[z^k, 1, 1  1/k])/k^2; phi2[z_] := z(1/(1  z^k) + (k  1)LerchPhi[z^k, 1, 1/k]/k)/k;
f[z_] := {0.5 (phi2[z]  phi1[z]), 0.5 I (phi1[z] + phi2[z]), 1/(k  k z^k)};
surface = ParametricPlot3D[Re[f[(1 + 2/(I Exp[x + I y]  1))^(2/k)]], {x,0, Pi/2}, {y, Pi/2, Pi/2}, PlotPoints > {8, 16}, Compiled > False, DisplayFunction > Identity][[1]];
surface = {surface, AffineShape[surface, {1, 1, 1}]};
Show[Graphics3D[Table[RotateShape[surface, 0, 0, 2Pi i/k], {i, 0, k  1}]]];
Links
Mathematica notebook  by Matthias Weber
Symmetric 4Noid  at the Virtual Math Museum

Richmond’s Minimal Surface  Mathematica 4.2, POVRay 3.6.1, 6/6/07
I learned about this minimal surface from Brian Johnston’s website. Click here to download some AutoLisp code for this image. Here is some Mathematica code:
(* runtime: 2 seconds *)
Richmond[n_, z_] := {1/(2z)  z^(2n + 1)/(4n + 2), I/(2z) + I z^(2n + 1)/(4n + 2), z^n/n};
ParametricPlot3D[Re[Richmond[5, r Exp[I theta]]], {r, 0.53, 1.187}, {theta, 0, 2Pi}, PlotPoints > {25, 180}, Compiled > False]

Other Minimal Surface Links
Bubble Drawings  an interesting idea of letting bubbles and ink dry on paper, by Charlotte Sullivan
Green Void  minimal surface artwork made from large sheets, by LAVA
Discrete Minimal Surfaces  minimal surfaces with inscribed circles, by Alexander Bobenko and Tim Hoffmann
