Flat Surfaces of Revolution
by John Oprea
This worksheet shows how Maple may be used to find flat surfaces of revolution. Recall that a surface is flat if its Gauss curvature vanishes; . A general reference is J. Oprea, Differential Geometry and its Applications . We start with the usual
> with(plots):
> dp := proc(X,Y)
> X[1]*Y[1]+X[2]*Y[2]+X[3]*Y[3];
> end:
> nrm := proc(X)
> sqrt(dp(X,X));
> xp := proc(X,Y)
> local a,b,c;
> a := X[2]*Y[3]-X[3]*Y[2];
> b := X[3]*Y[1]-X[1]*Y[3];
> c := X[1]*Y[2]-X[2]*Y[1];
> [a,b,c];
The next procedure computes the metric E=x_u dot x_u, F=x_u dot x_v and G=x_v dot x_v.
> EFG := proc(X)
> local Xu,Xv,E,F,G;
> Xu := [diff(X[1],u),diff(X[2],u),diff(X[3],u)]; Xv := [diff(X[1],v),diff(X[2],v),diff(X[3],v)];
> E := dp(Xu,Xu);
> F := dp(Xu,Xv);
> G := dp(Xv,Xv);
> simplify([E,F,G]);
The formula for Gauss curvature requires dotting certain second partial derivatives with the unit normal. This is done as follows. See the formulas for K and H given on page 91 and Lemma 2.1 on page 92 of Differential Geometry and its Applications . Now compare the Examples on pages 93-97 with the calculations below.
> UN := proc(X) # THE UNIT NORMAL FUNCTION
> local Xu,Xv,Z,s;
> Z := xp(Xu,Xv);
> s := nrm(Z);
> simplify([Z[1]/s,Z[2]/s,Z[3]/s],sqrt,symbolic);
> lmn := proc(X)
> local Xu,Xv,Xuu,Xuv,Xvv,U,l,m,n;
> Xu := [diff(X[1],u),diff(X[2],u),diff(X[3],u)];
> Xv := [diff(X[1],v),diff(X[2],v),diff(X[3],v)];
> Xuu := [diff(Xu[1],u),diff(Xu[2],u),diff(Xu[3],u)];
> Xuv := [diff(Xu[1],v),diff(Xu[2],v),diff(Xu[3],v)];
> Xvv := [diff(Xv[1],v),diff(Xv[2],v),diff(Xv[3],v)];
> U := UN(X);
> l := dp(U,Xuu);
> m := dp(U,Xuv);
> n := dp(U,Xvv);
> simplify([l,m,n]);
Finally we can calculate Gauss curvature K as follows.
> GK := proc(X)
> local E,F,G,l,m,n,S,T;
> S := EFG(X);
> T := lmn(X);
> E := S[1];
> F := S[2];
> G := S[3];
> l := T[1];
> m := T[2];
> n := T[3];
> simplify((l*n-m^2)/(E*G-F^2));
Now we can enter a function h which will be the profile curve of a surface of revolution with parametrization and the parametrization itself.
> h:=t->h(t);
> surfrev:=[u,h(u)*cos(v),h(u)*sin(v)];
We can take the Gauss curvature using the GK procedure above.
> gauss:=GK(surfrev);
We want , so we take the numerator of gauss and solve the differential equation obtained when we set the numerator equal to zero.
> numer(gauss);
We can solve for the function .
> sol:=rhs(dsolve(numer(gauss)=0,h(u)));
We can pick _C1 and _C2 in various ways to see what this function is.
> func1:=subs({_C1=1,_C2=0},sol);
> func2:=subs({_C1=0,_C2=1},sol);
> func3:=subs({_C1=1,_C2=1},sol);
If you don't recognize these surfaces yet, you can plot them!
> plot3d([u,func1*cos(v),func1*sin(v)],u=0..2,v=0..2*Pi,scaling=constrained,style=patch,shading=zhue, lightmodel=light3,grid=[5,25],orientation=[55,35]);
> plot3d([u,func2*cos(v),func2*sin(v)],u=0..2,v=0..2*Pi,scaling=constrained,style=patch,shading=zhue, lightmodel=light3,grid=[5,25],orientation=[55,35]);
> plot3d([u,func3*cos(v),func3*sin(v)],u=-1..2,v=0..2*Pi,scaling=constrained,style=patch,shading=zhue, lightmodel=light3,grid=[5,25],orientation=[55,35]);
So now you know what a flat surface of revolution must be.