Zdrojový kód

Následuje zdrojový kód programu Maple k vygenerování Klainovy láhve a Moebiova listu. Můžete si jej stáhnout i originální podobě - soubor "klain_src_mws"

Knihovny
> with(plots):

Hrdlo
> k1:=t->[0,0,t];
> r1:=t->(3*cos(t)+5)/4;
> dk1:=unapply(diff(k1(t),t),t);

Vrchní oblouk
> k2:=t->[1-cos(t),0,sin(t)+Pi];
> r2:=t->1/2;
> dk2:=unapply(diff(k2(t),t),t);

Vnoření
> k3:=t->[(cos(t)+1),0,Pi-t];
> r3:=t->(3-cos(t))/4;
> k3:=unapply(diff(k3(t),t),t);

Dno
> k4:=t->[0,0,-sin(t)];
> r4:=t->(3-cos(t))/2;
> dk4:=unapply(diff(k4(t),t),t);

Kompletace jednotlivých částí funkce
> kway:=t->piecewise(t<Pi, k1(t), t<2*Pi, k2(t-Pi), t<3*Pi, k3(t-2*Pi), t<4*Pi, k4(t-3*Pi), k1(t-4*Pi));
> rway:=t->piecewise(t<Pi, r1(t), t<2*Pi, r2(t-Pi), t<3*Pi, r3(t-2*Pi), t<4*Pi, r4(t-3*Pi), r1(t-4*Pi));

Plášť Klainovy láhve
> uu:=t->piecewise(t<Pi, [dk1(t)[3],0,-dk1(t)[1]], t<2*Pi, [dk2(t-Pi)[3],0,-dk2(t-Pi)[1]], t<3*Pi,[dk3(t-2*Pi)[3],0,-dk3(t-2*Pi)[1]],[-1,0,0]);
> u:=t->uu(t)/(sqrt((uu(t)[1])^2+(uu(t)[2])^2+(uu(t)[3])^2));
> v:=t->[0,1,0];
> klain:=(t, alpha)->kway(t)+(u(t)*cos(alpha)+v(t)*sin(alpha))*rway(t);
> klainx:=(t, alpha)->klain(t, alpha)[1];
> klainy:=(t, alpha)->klain(t, alpha)[2];
> klainz:=(t, alpha)->klain(t, alpha)[3];

Moebiův list
> mb:=(alpha, r)->[4/5*cos(alpha/2)*r-2.7, cos(alpha)*(1.2+4/5*sin(alpha/2)*r), sin(alpha)*(2.5+4/5*sin(alpha/2)*r)+1.5];

Vytváření obrázků
Hlavní animace zobrazení: Klainova láhev x Moebiův list
> sekvenci:=30:
> klain3dwf:=plot3d([klainx(t, alpha), klainy(t, alpha), klainz(t, alpha)], t=0..4*Pi, alpha=-0.0*Pi..2.0*Pi, color=frac(alpha/(2*Pi)+t/(8*Pi)), style=wireframe):
> mlistwf:=plot3d(mb(alpha, r), alpha=0..2*Pi, r=-1..1, color=frac(r/2), style=wireframe):
> mlistobr:=i->plot3d(mb(alpha, r), alpha=i/sekvenci*(2*Pi)..i/sekvenci*(2*Pi)+0.2*Pi, r=-1..1, color=frac(r/2), style=patchnogrid):
> obr:=i->plot3d([klainx(t, alpha), klainy(t, alpha), klainz(t, alpha)], t=i/sekvenci*(4*Pi)..i/sekvenci*(4*Pi)+0.4*Pi, alpha=-0.0*Pi..2.0*Pi, color=frac(alpha/(2*Pi)+t/(8*Pi)), style=patchnogrid):
> animace:=seq(display([obr(i), mlistobr(i), klain3dwf, mlistwf]), i=0..sekvenci-1):
> display([animace],insequence=true, scaling=CONSTRAINED, orientation=[48, 109]);

Klainova láhev - projekce do 3D přes čas
> plot3d([klainx(t, alpha), klainy(t, alpha), klainz(t, alpha)], t=0..4*Pi, alpha=0..2*Pi, color=frac(alpha/(2*Pi)+t/(8*Pi)), style=patch, scaling=constrained, orientation=[-63,119]);

Klainova láhev - projekce do 3D - řez přes střed
> plot3d([klainx(t, alpha), klainy(t, alpha), klainz(t, alpha)], t=0..4*Pi, alpha=-0.1*Pi..1.1*Pi, color=frac(alpha/(2*Pi)+t/(8*Pi)), style=patch, scaling=constrained, orientation=[-63,119], orientation=[-43,94]);