
|
Code de base :
size(7cm,0); import solids; settings.render=0; // à commenter si besoin settings.prc=false; // à commenter si besoin //------------------------------------------------------------------------------------------ // Draw right angle (MA,MB) in 3D -- Fonction de Philippe Ivaldi 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 _p=OA--OC--OB; picture pic_; draw(pic_, _p, p=p); if (fillpen!=nullpen) draw(pic_, surface(O--_p--cycle), fillpen); add(pic,pic_,M); } //-----------------------------------------------------------------------------------------
//////////////////// Définition des objets ////////////////////
//------------------ VALEURS À MODIFIER ----------------------- real R=4, h=2.5; // rayon de la sphère, hauteur de la section real ang=40; // angle {(-i)O'A} du diamètre de la section pen pSphere=bp+blue; // couleur et épaisseur du tracé de la sphère pen pSeg=bp+linetype("4 4")+.8*blue; // couleur et épaisseur du tracé des segments Label LA="$A$", LO="$O$", LO2="$O'$", LR="$R$", Lh="$h$", Lr="$r$"; // camera : x à gauche, y devant, z en haut currentprojection = orthographic(0,70,15); // changer z pour l'aplatissement de l'ellipse //-------------------------------------------------------------
triple pO=(0,0,0), pO2=(0,0,h); // pO : centre de la sphère, pO2 : centre de la section triple xSec=(-sqrt(R^2-h^2),0,h); // point A avant rotation transform3 T=rotate(ang,Z), t=rotate(180,Z); triple pA=T*xSec, pB=t*pA; // diamètre de la section triple pole=(h>0)? (0,0,-R) : (0,0,R); path3 gene=arc(pO,xSec,pole); //génératrice
revolution calotte=revolution(pole,gene,axis=Z,0,360); skeleton s; calotte.transverse(s,reltime(calotte.g,0));
//------------------ Tracés (commenter ce qui n'est pas voulu) --------------------
draw(calotte.silhouette(),pSphere); // Calotte draw(s.transverse.back,pSphere+linetype("4 4")); draw(surface(calotte),lightblue+opacity(.4));
if (h>0){ draw(Lh,pO2--pO,pSeg); draw(Lr,pA--pO2,pSeg); draw(LR,pO--pA,pSeg);} else { draw(Lh,pO--pO2,pSeg); draw(Lr,pO2--pA,pSeg); draw(LR,pA--pO,pSeg);}
drawrightangle(pO2,pO,pA,radius=5mm);
//---------------- labels ------------------ dot(Label(LO,align=unit(pO-pA)),pO); dot(Label(LA,align=unit(pA-pO2)),pA); dot(Label(LO2,align=unit(pO2-pA)),pO2); //------------------------------------------ shipout(bbox(1mm,invisible));
|

|
size(7cm,0); import solids; settings.render=0; // à commenter si besoin settings.prc=false; // à commenter si besoin //------------------------------------------------------------------------------------------ // Draw right angle (MA,MB) in 3D -- Fonction de Philippe Ivaldi 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 _p=OA--OC--OB; picture pic_; draw(pic_, _p, p=p); if (fillpen!=nullpen) draw(pic_, surface(O--_p--cycle), fillpen); add(pic,pic_,M); } //-----------------------------------------------------------------------------------------
//////////////////// Définition des objets ////////////////////
//------------------ VALEURS À MODIFIER ----------------------- real R=7, h=-4; // rayon de la sphère, hauteur de la section real ang=-50; // angle {(-i)O'A} du diamètre de la section pen pSphere=bp+brown; // couleur et épaisseur du tracé de la sphère pen pSeg=bp+linetype("4 4")+.8*red; // couleur et épaisseur du tracé des segments Label LA="$M$", LO="$O$", LO2="$I$", LR="$7$~cm", Lh="$4$~cm", Lr="$r$"; // camera : x à gauche, y devant, z en haut currentprojection = orthographic(10,70,15); // changer z pour l'aplatissement de l'ellipse //-------------------------------------------------------------
triple pO=(0,0,0), pO2=(0,0,h); // pO : centre de la sphère, pO2 : centre de la section triple xSec=(-sqrt(R^2-h^2),0,h); // point A avant rotation transform3 T=rotate(ang,Z), t=rotate(180,Z); triple pA=T*xSec, pB=t*pA; // diamètre de la section triple pole=(h>0)? (0,0,-R) : (0,0,R); path3 gene=arc(pO,xSec,pole); //génératrice
revolution calotte=revolution(pole,gene,axis=Z,0,360); skeleton s; calotte.transverse(s,reltime(calotte.g,0));
//------------------ Tracés (commenter ce qui n'est pas voulu) --------------------
draw(calotte.silhouette(),pSphere); // Calotte draw(s.transverse.back,pSphere+linetype("4 4")); //draw(surface(calotte),lightred+opacity(.4)); // +opacity(.4)
if (h>0){ draw(Lh,pO2--pO,pSeg); draw(Lr,pA--pO2,pSeg); draw(LR,pO--pA,pSeg);} else { draw(Lh,pO--pO2,pSeg); draw(Lr,pO2--pA,pSeg); draw(LR,pA--pO,pSeg);}
drawrightangle(pO2,pO,pA,radius=5mm);
//---------------- labels ------------------ dot(Label(LO,align=unit(pO-pA)),pO); dot(Label(LA,align=SE),pA); dot(Label(LO2,align=W),pO2); //------------------------------------------ shipout(bbox(1mm,invisible));
|

|
size(7cm,0); import solids; settings.render=0; settings.prc=false; //------------------------------------------------------------------------------------------ // Draw right angle (MA,MB) in 3D -- Fonction de Philippe Ivaldi 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 _p=OA--OC--OB; picture pic_; draw(pic_, _p, p=p); if (fillpen!=nullpen) draw(pic_, surface(O--_p--cycle), fillpen); add(pic,pic_,M); } //-----------------------------------------------------------------------------------------
//////////////////// Définition des objets ////////////////////
//------------------ VALEURS À MODIFIER ----------------------- real R=4, h=-2.5; // rayon de la sphère, hauteur de la section real ang=40; // angle {(-i)O'A} du diamètre de la section pen pSphere=bp+purple; // couleur et épaisseur du tracé de la sphère pen pSeg=bp+linetype("4 4")+deepmagenta; // couleur et épaisseur du tracé des segments Label LA="$A$", LO="$O$", LO2="$O'$", LR="$R$", Lh="$h$", Lr="$r$"; // camera : x à gauche, y devant, z en haut currentprojection = orthographic(10,70,15); // changer z pour l'aplatissement de l'ellipse //-------------------------------------------------------------
triple pO=(0,0,0), pO2=(0,0,h); // pO : centre de la sphère, pO2 : centre de la section triple xSec=(-sqrt(R^2-h^2),0,h); // point A avant rotation transform3 T=rotate(ang,Z), t=rotate(180,Z); triple pA=T*xSec, pB=t*pA; // diamètre de la section triple pole=(h>0)? (0,0,R) : (0,0,-R); path3 gene=arc(pO,xSec,pole); //génératrice
revolution calotte=revolution(pole,gene,axis=Z,0,360); skeleton s; calotte.transverse(s,reltime(calotte.g,0));
//------------------ Tracés (commenter ce qui n'est pas voulu) --------------------
draw(calotte.silhouette(),pSphere); // Calotte draw(s.transverse.back,pSphere+linetype("4 4")); //draw(surface(calotte),lightmagenta); // +opacity(.4)
if (h>0){ draw(Lh,pO2--pO,pSeg); draw(Lr,pA--pO2,pSeg); draw(LR,pO--pA,pSeg);} else { draw(Lh,pO--pO2,pSeg); draw(Lr,pO2--pA,pSeg); draw(LR,pA--pO,pSeg);}
drawrightangle(pO2,pO,pA,radius=5mm);
////---------------- labels ------------------ dot(Label(LO,align=unit(pO-pA)),pO); dot(Label(LA,align=NE),pA); dot(Label(LO2,align=unit(pO2-pA)),pO2); //------------------------------------------ shipout(bbox(1mm,invisible));
|

|
size(8cm,0); import solids; settings.render=0; // à commenter si besoin settings.prc=false; // à commenter si besoin //------------------------------------------------------------------------------------------ // v "direction" de la flèche de cotation, si cc=false le label change de côté void cote3D(picture pic=currentpicture, Label L="", triple A, triple B, real d=5mm, triple v, bool cc=true, pen p=currentpen, pen joinpen=dotted){ transform3 T=shift(d*unit(v)); triple A=A, B=B; pic.add(new void(picture f, transform3 t) { picture opic; path3 dist; triple Ap=t*A, Bp=t*B; triple a=T*Ap, b=T*Bp; if (cc) {dist=a--b;} else {dist=b--a;} draw(opic,L,dist,p,Arrows3); draw(opic,a--Ap^^b--Bp,joinpen); add(f,opic); }, true); } //-----------------------------------------------------------------------------------------
//////////////////// Définition des objets ////////////////////
//------------------ VALEURS À MODIFIER ----------------------- real R=4, h=-2.5; // rayon de la sphère, hauteur de la section real ang=0; // angle {(-i)O'A} du diamètre de la section pen pSphere=brown; // couleur et épaisseur du tracé de la sphère pen pSeg=brown+linetype("4 4"); // couleur et épaisseur du tracé des segments // camera : x à gauche, y devant, z en haut currentprojection = orthographic(10,70,15); // changer z pour l'aplatissement de l'ellipse //------------------------------------------------------------- triple pO=(0,0,0), pO2=(0,0,h); // pO : centre de la sphère, pO2 : centre de la section triple xSec=(-sqrt(R^2-h^2),0,h); // point A avant rotation transform3 T=rotate(ang,Z), t=rotate(180,Z); triple pA=T*xSec, pB=t*pA; // diamètre de la section triple pole=(h>0)? (0,0,R) : (0,0,-R); path3 gene=arc(pO,xSec,pole); //génératrice
revolution calotte=revolution(pole,gene,axis=Z,0,360); skeleton s; calotte.transverse(s,reltime(calotte.g,0)); path3 sol=shift(-2.5*Z)*plane(18*Y, -12*X, (6,-9,0)), c=shift(-2.5*Z)*scale3(3.12)*unitcircle3; //------------------ Tracés -------------------- draw(s.transverse.front,pSphere); // tracé section draw(surface(calotte),brown+opacity(.4)); draw(surface(reverse(c)^^sol,planar=true),brown+opacity(.4)); // plan avec un trou //------------------ Cotes -------------------- triple Tpole=shift((pB-pA)/2)*pole; cote3D(scale(.8)*"$5$~cm",pA,pB,5*mm,Z,brown,dotted+brown); cote3D(scale(.8)*"$1$~cm",pB,Tpole,2*mm,X,brown,dotted+brown); draw(pole--Tpole,dotted+brown);
shipout(bbox(1mm,invisible));
|