Nechť je dána část katenoidu (po vyjmutí jednoho poledníku)
a část helikoidu
.
Ukažte, že zobrazení je izometrií. Které křivky na helikoidu odpovídají v tomto zobrazení rovnoběžkám a poledníkům katenoidu?
Nejdříve ověříme izometrii ploch pomocí procedury G pro výpočet koeficientů první základní formy plochy (viz příklad 9.1):
> restart:with(linalg):
> G:=proc(surf,u,v)
local f1,f2,g11,g12,g22;
f1:=(u,v)->subs(uu=u,diff(surf(uu,v),uu));
f2:=(u,v)->subs(vv=v,diff(surf(u,vv),vv));
g11:=simplify(dotprod(f1(u,v),f1(u,v),orthogonal));
g12:=simplify(dotprod(f1(u,v),f2(u,v),orthogonal));
g22:=simplify(dotprod(f2(u,v),f2(u,v),orthogonal));
[g11,g12,g22];
end:
> catenoid:=(u,v)->[cosh(u)*cos(v),cosh(u)*sin(v),u];
> G(catenoid,u,v);
> helicoid:=(u,v)->[u*cos(v),u*sin(v),v];
> G(unapply(subs(u=sinh(u),helicoid(u,v)),u,v),u,v);
Nyní ověříme, že i plochy příslušné izometrické deformace dávají tutéž první základní formu plochy:
> f:=evalm(cos(t)*catenoid(u,v+t)+sin(t)*helicoid(sinh(u),v+t-Pi/2)):
> surf:=unapply([f[1],f[2],f[3]],u,v):
> G(surf,u,v);
Následující programový kód vytváří animaci izometrické deformace mezi katenoidem a helikoidem.
> with(plots):setoptions3d(scaling=constrained):
> for i from 0 to 50 do
P[i]:=plot3d(evalm(cos(i*Pi/100)*catenoid(u,v+i*Pi/100)+sin(i*Pi/100)*helicoid(sinh(u),v+i*Pi/100-Pi/2)),u=-2..2,v=0..2*Pi):
od:
> display(seq(P[i],i=0..50),insequence=true);
Další programový kód po spuštění znázorňuje, jak se postupně mění parametrické křivky na zadaných plochách:
> for i from 0 to 50 do
P[i]:=plot3d(evalm(cos(i*Pi/100)*catenoid(u,v+i*Pi/100)+sin(i*Pi/100)*helicoid(sinh(u),v+i*Pi/100-Pi/2)),u=-2..2,v=0..2*Pi,color=grey,style=wireframe):
u_CURVE[i]:=spacecurve(evalm(cos(i*Pi/100)*catenoid(u,Pi+i*Pi/100)+sin(i*Pi/100)*helicoid(sinh(u),Pi+i*Pi/100-Pi/2)),u=-2..2,thickness=2,color=blue):
v_CURVE[i]:=spacecurve(evalm(cos(i*Pi/100)*catenoid(1,v+i*Pi/100)+sin(i*Pi/100)*helicoid(sinh(1),v+i*Pi/100-Pi/2)),v=0..2*Pi,thickness=2,color=blue):
od:
> ANIM:=display([seq(P[i], i=0..50)], insequence=true):
> ANIM1:=display([seq(u_CURVE[i], i=0..50)], insequence=true):
> ANIM2:=display([seq(v_CURVE[i], i=0..50)], insequence=true):
> display(ANIM1,ANIM);display(ANIM2,ANIM);