Pas de problème. Je suis en train de faire une animation avec tout cela et je mettrai je gif.
Edit. Le voici :
Code : Tout sélectionner
import solids;
import graph3;
import animate;
unitsize(1cm);
settings.tex="pdflatex";
settings.outformat="pdf";
settings.render=0;
settings.prc=false;
currentlight = nolight;
currentprojection=orthographic(10,0,2);
dotfactor=3.5;
void drawrightangle(picture pic=currentpicture,
triple M, triple A, triple B,
real radius=0,
pen p=currentpen,
pen fillpen=nullpen,
projection P=currentprojection)
{
p=linejoin(0)+linecap(0)+p;
if (radius==0) radius=arrowfactor*sqrt(2);
transform3 T=shift(-M);
triple OA=radius/sqrt(2)*unit(T*A),
OB=radius/sqrt(2)*unit(T*B),
OC=OA+OB;
path3 tp=OA--OC--OB;
picture tpic;
draw(tpic, tp, p=p);
if (fillpen!=nullpen) draw(tpic, surface(O--tp--cycle), fillpen);
add(pic,tpic,M);
}
animation Anim;
for(real h=5;h>-5;h-=0.1)
{
save();
write("on passe a h="+(string)h);
real a=3;
triple p0=(0,0,0);
//real h=3.4;
pen backpen=defaultbackpen;
real largplan=9;
path3 p=rotate(20,Z)*shift((-largplan/2,-largplan/2,h))*(scale3(largplan)*unitsquare3);
revolution b=sphere(p0,a);
triple H=(0,0,h);
if((h>-a)&&(h<a)){
real rb=sqrt(a*a-h*h);
real k=(90+aSin(h/a))/180;
triple A=rotate(40,Z)*(rb,0,h);
path3 genhaut=arc(p0,a,0,0,aCos(h/a),0);
path3 genbas=arc(p0,a,aCos(h/a),0,180,0);
revolution bas=revolution(p0,genbas,Z,0,360);
revolution haut=revolution(p0,genhaut,-Z,0,360);
skeleton s;
b.transverse(s,reltime(b.g,k));
draw(b.silhouette(),black);
draw(surface(p),white);
draw(b.silhouette(),backpen);
draw(p);
draw(surface(haut),white);
draw(haut.silhouette());
draw(bas.silhouette(),backpen);
draw(surface(circle((0,0,h),rb,Z)),lightblue);
draw(p,backpen);
//draw(A--H--p0--cycle,backpen);
draw(s.transverse.back,backpen);
draw(s.transverse.front);
//dot(p0);
//dot(H);
//dot(A);
//label("$O$",p0,W);
//label("$H$",H,NW);
//label("$A$",A,SE);
//drawrightangle(H,p0,A);
}
if(h>=a){
draw(b.silhouette());
draw(surface(p),white);
draw(b.silhouette(),backpen);
draw(p);
}
if(h<=-a){
draw(p);
draw(surface(b),white);
draw(p,backpen);
draw(b.silhouette());
}
Anim.add();
restore();
};
Anim.movie();