Cilindro ottenuto mediante la traslazione di una circonferenza

settings.render=8;
settings.prc=true;
import graph3;
import three;
import animate;
animation A1=animation("moviecylinder");

triple F_orig(pair uv) {
  real t=uv.x;
  real s=uv.y;
  return (0.5*cos(t), 0.5*sin(t), s);
}

picture pic2;
size(pic2,10cm,10cm);

surface surf_o=surface(F_orig,(0,-1),(2*pi,1),Spline);
draw(pic2,surf_o, surfacepen=material(green+opacity(0.5), emissivepen=0.2 white));

draw(pic2,-1X -- X, arrow=Arrow3(), L=Label("$x$", position=EndPoint, align=W));
draw(pic2,-1Y -- Y, arrow=Arrow3(), L=Label("$y$", position=EndPoint));
draw(pic2,-1Z -- Z, arrow=Arrow3(), L=Label("$z$", position=EndPoint));

real x(real u) {return 0.5*cos(u);}
real y(real u) {return 0.5*sin(u);}
real z(real u) {return -1;}

path3 myc5=graph(x,y,z,0,2*pi,operator ..);
draw(pic2,myc5,p=red+1.2bp);

draw(pic2,(0.5,0,-1) -- (0.5,0,-0.7), arrow=Arrow3(), p=red);
draw(pic2,(0,0.5,-1) -- (0,0.5,-0.7), arrow=Arrow3(), p=red);
draw(pic2,(0,-0.5,-1) -- (0,-0.5,-0.7), arrow=Arrow3(), p=red);
draw(pic2,(-0.5,0,-1) -- (-0.5,0,-0.7), arrow=Arrow3(), p=red);
A1.add(pic2);

int NN=30;
real h=2/NN;
real z_old=-1;
for(int i=0; i <= NN; ++i) {
  real z=-1+h*i;
  triple center=(0,0,z);
  picture pic3;
  size(pic3,10cm,10cm);
  triple N=(0,0,1);
  path3 myc1=circle(c=center, r=0.5, normal=N);
  draw(pic3,myc1,red);
  surface surf_o=surface(F_orig,(0,z_old),(2*pi,z),Spline);
  draw(pic3,surf_o, surfacepen=material(green+opacity(0.5), emissivepen=0.2 white));
  draw(pic3,-1X -- X, arrow=Arrow3(), L=Label("$x$", position=EndPoint, align=W));
  draw(pic3,-1Y -- Y, arrow=Arrow3(), L=Label("$y$", position=EndPoint));
  draw(pic3,-1Z -- Z, arrow=Arrow3(), L=Label("$z$", position=EndPoint));
  A1.add(pic3);
  real z_old=z;
}

A1.movie(BBox(10,Fill(rgb(1,1,1))),delay=1000);
Link al pdf navigabile (visualizzabile con Acrobat Reader)