
|
Code de base :
size(7cm,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); }
// 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=7, ang=0; // rayon, hauteur du cône, angle {iOA} du diamètre de base pen pCone=bp+blue; // couleur et épaisseur du tracé cône real coef=.5; // coefficient de réduction pour la section pen pSec=pCone; // couleur et épaisseur du tracé de la section // camera : x à gauche, y devant, z en haut currentprojection = orthographic(0,70,20); // changer z pour l'aplatissement de l'ellipse //------------------------------------------------------------- bool sens=true; if (h<0){sens=false;} triple pO=(0,0,0), pS=(0,0,h); // pO : centre de la base, pS : sommet triple xb=(r,0,0), xSec=relpoint(pS--xb,coef); transform3 T=rotate(ang,Z), t=rotate(180,Z); triple pA=T*xb, pB=t*pA; // diamètre de la base revolution CoRev=cone(pO,r,h,axis=Z,n=1);
//-------- Section ---------- triple pO_1=pS*(1-coef), pA_1=T*xSec, pB_1=t*pA_1; path3 seg=shift(0,0,(1-coef)*h)*scale3(coef)*(pA--pB); // (changer pB en pO pour le rayon) path3 section=circle(pO_1,coef*r,Z);
//------------------ Tracés (commenter ce qui n'est pas voulu) --------------------
//-------- Section ---------- // Tour // skeleton s; CoRev.transverse(s,reltime(CoRev.g,1-coef)); draw(s.transverse.back,linetype("4 4")+pSec); draw(s.transverse.front,pSec); // Intérieur // draw(surface(section),paleblue+opacity(.2)); // draw(seg,dashed); // diamètre dot(Label("$O'$",align=SE),pO_1); dot(Label("$A'$",align=unit(pA_1-pB_1)),pA_1); dot(Label("$B'$",align=unit(pB_1-pA_1)),pB_1); drawrightangle(pO_1,pS,pB_1,radius=5mm);
//-------- Cône ---------- draw(CoRev,pCone); //draw(surface(CoRev),lightblue+opacity(.5)); draw(pS--pO^^pA--pB,dashed); // diamètre (changer pB en pO pour le rayon) label("$S$",pS,N); dot(Label("$O$",align=SE),pO); dot(Label("$A$",align=unit(pA-pB)),pA); dot(Label("$B$",align=unit(pB-pA)),pB); drawrightangle(pO,pS,pB,radius=5mm);
//draw(pA--pS--pB); // à commenter ou décommenter
//------------------- Cotes (décommenter ce qui est voulu) -------------------- triple sympO=rotate(180,pS,xb)*pO, v=sympO-pO; // direction perpendiculaire à la génératrice
//-------- génératrice ---------- //cote3D(Label(format("$%f$",length(pS-xb))),pS,xb,12mm,v,sens);
//-------- Réduction -- génératrice ---------- //cote3D(Label(format("$%f$",length(pS-xSec))),pS,xSec,5mm,v,sens);
//-------- Réduction -- hauteur ---------- //triple s3=pS-(coef*r)*X; //cote3D(Label(format("$%f$",h*coef)),t*xSec,s3,7mm,-X,sens);
//-------- rayon ---------- //cote3D(Label(format("$%f$",r)),pA,pO,4mm,-Z,sens);
//-------- hauteur ---------- //triple s1=pS-r*X; //cote3D(Label(format("$%f$",abs(h))),t*xb,s1,7mm,-X,sens); //draw(pS--s1,dotted);
shipout(bbox(1mm,invisible));
|

|
size(7cm,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); }
// 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=3, h=6, ang=0; // rayon, hauteur du cône, angle {iOA} du diamètre de base pen pCone=bp+darkgreen; // couleur et épaisseur du tracé cône real coef=.6; // coefficient de réduction pour la section pen pSec=pCone; // couleur et épaisseur du tracé de la section // camera : x à gauche, y devant, z en haut currentprojection = orthographic(0,70,20); // changer z pour l'aplatissement de l'ellipse //------------------------------------------------------------- bool sens=true; if (h<0){sens=false;} triple pO=(0,0,0), pS=(0,0,h); // pO : centre de la base, pS : sommet triple xb=(r,0,0), xSec=relpoint(pS--xb,coef); transform3 T=rotate(ang,Z), t=rotate(180,Z); triple pA=T*xb, pB=t*pA; // diamètre de la base revolution CoRev=cone(pO,r,h,axis=Z,n=1);
//-------- Section ---------- triple pO_1=pS*(1-coef), pA_1=T*xSec, pB_1=t*pA_1; path3 seg=shift(0,0,(1-coef)*h)*scale3(coef)*(pA--pB); // (changer pB en pO pour le rayon) path3 section=circle(pO_1,coef*r,Z);
//------------------ Tracés (commenter ce qui n'est pas voulu) -------------------- //-------- Section ---------- // Tour // skeleton s; CoRev.transverse(s,reltime(CoRev.g,1-coef)); draw(s.transverse.back,linetype("4 4")+pSec); draw(s.transverse.front,pSec); // Intérieur // draw(surface(section),green+opacity(.2)); // draw(seg,dashed); // diamètre dot(Label("$O'$",align=SE),pO_1); dot(Label("$A'$",align=unit(pA_1-pB_1)),pA_1); dot(Label("$B'$",align=unit(pB_1-pA_1)),pB_1); drawrightangle(pO_1,pS,pB_1,radius=5mm);
//-------- Cône ---------- draw(CoRev,pCone); //draw(surface(CoRev),lightblue+opacity(.5)); draw(pS--pO^^pA--pB,dashed); // diamètre (changer pB en pO pour le rayon) label("$S$",pS,N); dot(Label("$O$",align=SE),pO); dot(Label("$A$",align=unit(pA-pB)),pA); dot(Label("$B$",align=unit(pB-pA)),pB); drawrightangle(pO,pS,pB,radius=5mm);
//draw(pA--pS--pB); // à commenter ou décommenter
//------------------ Cotes (décommenter ce qui est voulu) -------------------- triple sympO=rotate(180,pS,xb)*pO, v=sympO-pO; // direction perpendiculaire à la génératrice
//-------- génératrice ---------- //cote3D(Label(format("$%f$",length(pS-xb))),pS,xb,12mm,v,sens);
//-------- Réduction -- génératrice ---------- //cote3D(Label(format("$%f$",length(pS-xSec))),pS,xSec,5mm,v,sens);
//-------- Réduction -- hauteur ---------- triple s3=pS-(coef*r)*X; cote3D(Label(format("$%f$",h*coef)),t*xSec,s3,7mm,-X,sens);
//-------- rayon ---------- cote3D(Label(format("$%f$",r)),pA,pO,10mm,-Z,sens);
//-------- hauteur ---------- triple s1=pS-r*X; cote3D(Label(format("$%f$",h)),t*xb,s1,7mm,-X,sens); draw(pS--s1,dotted);
shipout(bbox(1mm,invisible));
|
|
size(7cm,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); }
// 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=3, h=6, ang=45; // rayon, hauteur du cône, angle {iOA} du diamètre de base pen pCone=bp+blue; // couleur et épaisseur du tracé cône real coef=.6; // coefficient de réduction pour la section pen pSec=bp+purple; // couleur et épaisseur du tracé de la section // camera : x à gauche, y devant, z en haut currentprojection = orthographic(0,70,20); // changer z pour l'aplatissement de l'ellipse //------------------------------------------------------------- bool sens=true; if (h<0){sens=false;} triple pO=(0,0,0), pS=(0,0,h); // pO : centre de la base, pS : sommet triple xb=(r,0,0), xSec=relpoint(pS--xb,coef); transform3 T=rotate(ang,Z), t=rotate(180,Z); triple pA=T*xb, pB=t*pA; // diamètre de la base revolution CoRev=cone(pO,r,h,axis=Z,n=1);
//-------- Section ---------- triple pO_1=pS*(1-coef), pA_1=T*xSec, pB_1=t*pA_1; path3 seg=shift(0,0,(1-coef)*h)*scale3(coef)*(pA--pB); // (changer pB en pO pour le rayon) path3 section=circle(pO_1,coef*r,Z);
//------------------ Tracés (commenter ce qui n'est pas voulu) -------------------- //-------- Section ---------- // Tour // skeleton s; CoRev.transverse(s,reltime(CoRev.g,1-coef)); draw(s.transverse.back,linetype("4 4")+pSec); draw(s.transverse.front,pSec); // Intérieur // draw(surface(section),purple+opacity(.2)); // draw(seg,dashed); // diamètre dot(Label("$O'$",align=SE),pO_1); dot(Label("$A'$",align=SW),pA_1); dot(Label("$B'$",align=NE),pB_1); drawrightangle(pO_1,pS,pB_1,radius=5mm);
//-------- Cône ---------- draw(CoRev,pCone); //draw(surface(CoRev),lightblue+opacity(.5)); draw(pS--pO^^pA--pB,dashed); // diamètre (changer pB en pO pour le rayon) label("$S$",pS,N); dot(Label("$O$",align=SE),pO); dot(Label("$A$",align=SW),pA); dot(Label("$B$",align=NE),pB); drawrightangle(pO,pS,pB,radius=5mm);
draw(pA--pS--pB); // à commenter ou décommenter
//------------------ Cotes (décommenter ce qui est voulu) -------------------- triple sympO=rotate(180,pS,xb)*pO, v=sympO-pO; // direction perpendiculaire à la génératrice
//-------- génératrice ---------- //cote3D(Label(format("$%f$",length(pS-xb))),pS,xb,7mm,v,sens);
//-------- Réduction -- génératrice ---------- //cote3D(Label(format("$%f$",length(pS-xSec))),pS,xSec,3mm,v,sens);
//-------- Réduction -- hauteur ---------- triple s3=pS-(coef*r)*X; cote3D(Label(format("$%f$",h*coef)),t*xSec,s3,7mm,-X,sens);
//-------- rayon ---------- cote3D(Label(format("$%f$",r)),pA,pO,10mm,-Z,sens);
//-------- hauteur ---------- triple s1=pS-r*X; cote3D(Label(format("$%f$",h)),t*xb,s1,7mm,-X,sens); draw(pS--s1,dotted);
shipout(bbox(1mm,invisible));
|
|
size(7cm,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); }
// 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=6, h=-8, ang=0; // rayon, hauteur du cône, angle {iOA} du diamètre de base pen pCone=bp+blue; // couleur et épaisseur du tracé cône real coef=.7; // coefficient de réduction pour la section pen pSec=pCone; // couleur et épaisseur du tracé de la section // camera : x à gauche, y devant, z en haut currentprojection = orthographic(0,70,10); // changer z pour l'aplatissement de l'ellipse //------------------------------------------------------------- bool sens=true; if (h<0){sens=false;} triple pO=(0,0,0), pS=(0,0,h); // pO : centre de la base, pS : sommet triple xb=(r,0,0), xSec=relpoint(pS--xb,coef); transform3 T=rotate(ang,Z), t=rotate(180,Z); triple pA=T*xb, pB=t*pA; // diamètre de la base revolution CoRev=cone(pO,r,h,axis=Z,n=1);
//-------- Section ---------- triple pO_1=pS*(1-coef), pA_1=T*xSec, pB_1=t*pA_1; path3 seg=shift(0,0,(1-coef)*h)*scale3(coef)*(pA--pO); // (changer pB en pO pour le rayon) path3 section=circle(pO_1,coef*r,Z);
//------------------ Tracés (commenter ce qui n'est pas voulu) -------------------- //-------- Section ---------- // Tour // skeleton s; CoRev.transverse(s,reltime(CoRev.g,1-coef)); draw(s.transverse.back,linetype("4 4")+pSec); draw(s.transverse.front,pSec); // Intérieur // draw(surface(section),paleblue+opacity(.2)); // draw(seg,dashed); // diamètre dot(Label("$O'$",align=E),pO_1); dot(Label("$A'$",align=unit(pA_1-pB_1)),pA_1); //dot(Label("$B'$",align=unit(pB_1-pA_1)),pB_1); drawrightangle(pO_1,pS,pA_1,radius=5mm);
//-------- Cône ---------- draw(CoRev,pCone); //draw(surface(CoRev),lightblue+opacity(.5)); draw(pS--pO^^pA--pO,dashed); // diamètre (changer pB en pO pour le rayon) label("$S$",pS,S); dot(Label("$O$",align=E),pO); dot(Label("$A$",align=unit(pA-pB)),pA); //dot(Label("$B$",align=unit(pB-pA)),pB); drawrightangle(pO,pS,pA,radius=5mm);
//draw(pA--pS--pB); // à commenter ou décommenter
//------------------ Cotes (décommenter ce qui est voulu) -------------------- triple sympO=rotate(180,pS,xb)*pO, v=sympO-pO; // direction perpendiculaire à la génératrice
//-------- génératrice ---------- cote3D(Label(format("$%f$",length(pS-xb))),pS,xb,12mm,v,sens);
//-------- Réduction -- génératrice ---------- cote3D(Label(format("$%f$",length(pS-xSec))),pS,xSec,5mm,v,sens);
//-------- Réduction -- hauteur ---------- //triple s3=pS-(coef*r)*X; //cote3D(Label(format("$%f$",h*coef)),t*xSec,s3,-X,sens);
//-------- rayon ---------- //cote3D(Label(format("$%f$",r)),pA,pO,10mm,-Z,sens);
//-------- hauteur ---------- triple s1=pS-r*X; cote3D(Label(format("$%f$",abs(h))),t*xb,s1,7mm,-X,sens); draw(pS--s1,dotted);
label("?",midpoint(pA_1--pO_1),N); shipout(bbox(1mm,invisible));
|
|
size(7cm,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); }
// 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=5, h=10, ang=60; // rayon, hauteur du cône, angle {iOA} du diamètre de base pen pCone=bp+darkgreen; // couleur et épaisseur du tracé cône real coef=.4; // coefficient de réduction pour la section pen pSec=pCone; // couleur et épaisseur du tracé de la section // camera : x à gauche, y devant, z en haut currentprojection = orthographic(0,70,20); // changer z pour l'aplatissement de l'ellipse //------------------------------------------------------------- bool sens=true; if (h<0){sens=false;} triple pO=(0,0,0), pS=(0,0,h); // pO : centre de la base, pS : sommet triple xb=(r,0,0), xSec=relpoint(pS--xb,coef); transform3 T=rotate(ang,Z), t=rotate(180,Z); triple pA=T*xb, pB=t*pA; // diamètre de la base revolution CoRev=cone(pO,r,h,axis=Z,n=1); //-------- Section ---------- triple pO_1=pS*(1-coef), pA_1=T*xSec, pB_1=t*pA_1; path3 seg=shift(0,0,(1-coef)*h)*scale3(coef)*(pA--pO); // (changer pB en pO pour le rayon) path3 section=circle(pO_1,coef*r,Z);
//------------------ Tracés (commenter ce qui n'est pas voulu) -------------------- //-------- Section ---------- // Tour // skeleton s; CoRev.transverse(s,reltime(CoRev.g,1-coef)); draw(s.transverse.back,linetype("4 4")+pSec); draw(s.transverse.front,pSec); // Intérieur // //draw(surface(section),paleblue+opacity(.2)); // draw("$?$",seg,dashed); // diamètre dot(Label("$O'$",align=E),pO_1); dot(Label("$A'$",align=unit(pA_1-pB_1)),pA_1); //dot(Label("$B'$",align=unit(pB_1-pA_1)),pB_1); drawrightangle(pO_1,pS,pA_1,radius=5mm);
//-------- Cône ---------- draw(CoRev,pCone); //draw(surface(CoRev),palegreen+opacity(.5)); draw(pS--pO^^pA--pO,dashed); // diamètre (changer pB en pO pour le rayon) label("$S$",pS,N); dot(Label("$O$",align=E),pO); dot(Label("$A$",align=unit(pA-pB)),pA); //dot(Label("$B$",align=unit(pB-pA)),pB); drawrightangle(pO,pS,pA,radius=5mm);
draw(pA--pS); // à commenter ou décommenter
//------------------ Cotes (décommenter ce qui est voulu) -------------------- triple sympO=rotate(180,pS,xb)*pO, v=sympO-pO; // direction perpendiculaire à la génératrice
//-------- génératrice ---------- cote3D("$5\sqrt{5}$",pS,xb,15mm,v,sens);
//-------- Réduction -- génératrice ---------- cote3D("$2\sqrt{5}$",pS,xSec,4mm,v,sens);
//-------- Réduction -- hauteur ---------- //triple s3=pS-(coef*r)*X; //cote3D(Label(format("$%f$",h*coef)),t*xSec,s3,7mm,-X,sens);
//-------- rayon ---------- cote3D("$?$",pA,pO,10mm,-Z,sens);
//-------- hauteur ---------- triple s1=pS-r*X; cote3D(Label(format("$%f$",h)),t*xb,s1,7mm,-X,sens); draw(pS--s1,dotted);
shipout(bbox(1mm,invisible));
|