Minimalflächen

Minimalflächen lassen sich experimentell durch Seifenhäute erzeugen. Taucht man eine irgendwie geformte Drahtschlinge in eine Seifenlösung, so bildet sich in der Schlinge bei vorsichtigem Herausziehen ein hauchfeiner Film. Wegen seiner Oberflächenspannung nimmt das Seifenhäutchen eine Form an, in der seine potentielle Energie minimal ist. Da diese Energie proportional zum Flächeninhalt ist, hat die Seifenhaut einen kleineren Flächeninhalt als jede andere noch so geringfügig geformte Fläche, die in dieser Drahtschlinge eingespannt ist. Mathematisch sind Minimalflächen, Flächen, deren mittlere Krümmung in allen Punkten Null ist. D.h. bei Minimalflächen sind die Krümmungen der beiden maximalen Normalschnitte gleich groß. Dieses Gleichgewicht der Krümmungen ist mit ein Grund für den ästhetischen Reiz von Minimalflächen.

Man kann zeigen, daß sich nicht-konstante Minimalflächen sich durch den folgenden Satz an Integralen

(sog. Weierstrass-Darstellung) konstruieren lassen. Hierin sind g(z) und h(z) holomorphe Funktionen über einer einfach zusammenhängenden Domäne.

In MAPLE V haben diese Abbildungen die Gestalt (mit der Annahme f(z)=h(z)/2,g(z)=z)

X:=unapply(Re(subs(z=r*exp(I*phi),int(f(zeta)*(1-zeta^2),zeta=1..z))),r,phi);
Y:=unapply(Re(subs(z=r*exp(I*phi),int(I*f(zeta)*(1+zeta^2),zeta=1..z))),r,phi)
Z:=unapply(Re(subs(z=r*exp(I*phi),int(2*zeta*f(zeta),zeta=1..z))),r,phi);

plot3d([X(r,phi),Y(r,phi),Z(r,phi)],r=r_min..r_max,phi=phi_min..phi_max);

Verschiedene Beispiele für Minimalflächen, die auf diese Weise mit MAPLE V erzeugt wurden sind auf dieser Seitedargestellt. Komplexere Minimalflächenhingegen lassen sich mit MAPLE nur mit sehr hohen Computer-Aufwand (CPU-Zeit, Memory) generieren. Eine Möglichkeit komplexere Flächen zu rendern bietet POV (Persistence of Vision Ray Tracer). Das Rendering Modell von POV beruht auf dem "Phong shading" Modell. In diesem Modell werden die Normalen-Vektoren der darzustellenden Flächen in signifikanter Weise benutzt. POV erwartet Flächendaten in dem Format:

smooth_triangle {
<p11 p12 p13>, <n11 n12 n13>
<p21 p22 p23>, <n21 n22 n23>
<p31 p32 p33>, <n31 n32 n33>
}

Darin sind (p11 p12 p13),(p21 p22 p23),(p31 p32 p33) die Eckpunkte eines Flächen-Dreiecks welches die darzustellende Fläche approximieren und (n11 n12 n13),(n21 n22 n23),(n31 n32 n33) die Koordinaten der Normalenvektoren an diesen Punkten. Ausgehend von der Weierstrass-Darstellung für Minimal-Flächen (s.o.) und den Weierstrass-Daten g(z), h(z) lassen sich diese Koordinaten mit MAPLE auf die folgende Weise erzeugen:

X:=unapply(Re(subs(z=r*exp(I*phi),int(h(z)/2*(1/g(z)-g(z)),z))),r,phi)
Y:=unapply(Re(subs(z=r*exp(I*phi),int(I*h(z)/2*(1/g(z)+g(z)),z))),r,phi)
Z:=unapply(Re(subs(z=r*exp(I*phi),int(h(z),z))),r,phi);;

norm:=unapply(abs(g(z)^2)+1,z);
nX:=unapply(2*Re(subs(z=r*exp(I*phi),(2*Re(g(z))/norm(z)))),r,phi)
nY:=unapply(2*Im(subs(z=r*exp(I*phi),(2*Im(g(z))/norm(z)))),r,phi)
nZ:=unapply(subs(z=r*exp(I*phi),(abs(g(z)^2)-1)/norm(z)),r,phi);

s:="data.inc";

dr:=(r_max-r_min)/n;
dphi:=(phi_max-phi_min)/m;

mtopov2:=proc(n,m,umin,du,vmin,dv,s)
local i, j, u1, u2, v1, v2, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, nx1, nx2, nx3, nx4, ny1, ny2, ny3, ny4, nz1, nz2, nz3, nz4;

for i from 1 by 1 to n do

u1:=umin+(i-1)*du:
u2:=umin+i*du:

for j from 1 by 1 to m do

v1:=vmin+(j-1)*dv:
v2:=vmin+j*dv:

x1:=evalf(X(u1,v1)):y1:=evalf(Y(u1,v1)):z1:=evalf(Z(u1,v1)):
x2:=evalf(X(u2,v1)):y2:=evalf(Y(u2,v1)):z2:=evalf(Z(u2,v1)):
x3:=evalf(X(u2,v2)):y3:=evalf(Y(u2,v2)):z3:=evalf(Z(u2,v2)):
x4:=evalf(X(u1,v2)):y4:=evalf(Y(u1,v2)):z4:=evalf(Z(u1,v2)):
nx1:=evalf(nX(u1,v1)):ny1:=evalf(nY(u1,v1)):nz1:=evalf(nZ(u1,v1)):
nx2:=evalf(nX(u2,v1)):ny2:=evalf(nY(u2,v1)):nz2:=evalf(nZ(u2,v1)):
nx3:=evalf(nX(u2,v2)):ny3:=evalf(nY(u2,v2)):nz3:=evalf(nZ(u2,v2)):
nx4:=evalf(nX(u1,v2)):ny4:=evalf(nY(u1,v2)):nz4:=evalf(nZ(u1,v2)):
fprintf(s,`%s\n %c %g %c %g %c %g %s %g %c %g %c %g %s\n %c %g %c %g
%c %g %s %g %c %g %c %g %s\n %c %g %c %g %c %g %s %g %c %g %c %g %s\n`,

`smooth_triangle{`,
`<`,x1,`,`,y1,`,`,z1,`>,<`,nx1,`,`,ny1,`,`,nz1,`>,`,
`<`,x2,`,`,y2,`,`,z2,`>,<`,nx2,`,`,ny2,`,`,nz2,`>,`,
`<`,x3,`,`,y3,`,`,z3,`>,<`,nx3,`,`,ny3,`,`,nz3,`>}`);
fprintf(s,`%s\n %c %g %c %g %c %g %s %g %c %g %c %g %s\n %c %g %c %g
%c %g %s %g %c %g %c %g %s\n %c %g %c %g %c %g %s %g %c %g %c %g %s\n`,

`smooth_triangle{`,
`<`,x1,`,`,y1,`,`,z1,`>,<`,nx1,`,`,ny1,`,`,nz1,`>,`,
`<`,x3,`,`,y3,`,`,z3,`>,<`,nx3,`,`,ny3,`,`,nz3,`>,`,
`<`,x4,`,`,y4,`,`,z4,`>,<`,nx4,`,`,ny4,`,`,nz4,`>}`);
od:
od:

fclose(s):
end:

mtopov2(n,m,r_min,dr,phi_min,dphi,s);