

































|
// définition de l'unité de longueur unitsize(1cm); // on trace un segment défini par les coordonnées de ses extrémités draw ((0,0)--(6,1)); // un deuxième segment d'un trait plus épais draw ((0,0)--(5,2),linewidth(4bp)); // un troisième vert et d'une épaisseur intermédiaire draw ((0,0)--(4,4),green+2bp); |
|
// On définit la largeur de l'image ; // la hauteur va s'adapter pour garder les proportions. size(7cm,0); // définition de 4 "points" (couples de coordonnées) // NB : ces couples pourraient aussi caractériser des vecteurs pair A, B, C, D; A=(0,0); B=(2,1); C=(2,2); D=(4,0); // on trace [AB] de couleur rouge draw(A--B,red); // et [CD] d'un trait plus épais et bleu draw(C--D,blue+3bp); |
|
// On définit la largeur de l'image ; // la hauteur va s'adapter pour garder les proportions. size(6cm,0); // définition de 4 "points" (couples de coordonnées) // NB : ces couples pourraient aussi caractériser des vecteurs pair pA=(0,0),pB=(2,1),pC=(2,2),pD=(4,0); // on trace deux segments avec le même stylo orange draw(pA--pB^^pC--pD,orange+3bp); // on place de gros points bleus :-) dot(pA--pB^^pC--pD,blue+8bp); // et on étiquette l'un des points label("$\Omega$",pA,2S); // Ajout d'un cadre, distant des bords de l'image de 5mm shipout(bbox(5mm)); |
|
// définition de l'unité de longueur unitsize(1cm); draw ((0,5)--(7,5),solid+blue+1bp); draw ((0,4)--(7,4),dotted+.5blue+1bp); draw ((0,3)--(7,3),dashed+red+1bp); draw ((0,2)--(7,2),longdashed+.5red+1bp); draw ((0,1)--(7,1),dashdotted+green+1bp); draw ((0,0)--(7,0),longdashdotted+.5green+1bp); // Ajout d'un cadre, distant des bords de l'image de 3mm shipout(bbox(3mm)); |
|
/* Styles prédéfinis pen solid=linetype(""); pen dotted=linetype("0 4"); pen dashed=linetype("8 8"); pen longdashed=linetype("24 8"); pen dashdotted=linetype("8 8 0 8"); pen longdashdotted=linetype("24 8 0 8"); pen Dotted=dotted+1.0; pen Dotted(pen p=currentpen) {return dotted+2*linewidth(p);} */ unitsize(1cm); // définir ses propres styles de traits draw ((0,5)--(7,5),linetype("")); draw ((0,4)--(7,4),linetype("0 4")); draw ((0,3)--(7,3),linetype("8 8")); draw ((0,2)--(7,2),linetype("24 8")); draw ((0,1)--(7,1),linetype("8 8 0 8")); draw ((0,0)--(7,0),Dotted); pen dotteddash=linetype("0 4 4 4"); draw ((0,-1)--(7,-1),linetype("0 4 4 4")); // Ajout d'un cadre, distant des bords de l'image de 3mm shipout(bbox(3mm)); |
|
unitsize(1cm); transform t=shift(0,-1); path p=(0,0)--(1,1)--(2,0)--(3,1)--(4,0); draw(p,10bp+squarecap); // pen squarecap=linecap(0); draw(t*p,10bp+roundcap); // pen roundcap=linecap(1); draw(t^2*p,10bp+extendcap); // pen extendcap=linecap(2); draw(t^4*p,10bp+miterjoin); // pen miterjoin=linejoin(0); draw(t^5*p,10bp+roundjoin); // pen roundjoin=linejoin(1); draw(t^6*p,10bp+beveljoin); // pen beveljoin=linejoin(2); shipout(bbox(5mm)); |
|
// On définit la largeur de l'image ; // la hauteur va s'adapter pour garder les proportions. size(7cm,0); // définition de 2 couples de coordonnées pair pA=(1,1),pB=(4,0); // Construction des points correspondants dot("$A$",pA,N); dot("$B$",pB,N); // On trace la droite (AB) draw(interp(pA,pB,-.5)--interp(pA,pB,1.25)); // interp(pA,pB,-.5) désigne le point M de (AB)\[AB) // vec{AM}=-0,5 vec{AB} // interp(pA,pB,1.25) désigne le point N de (AB)\[BA) // vec{AN}=1,25 vec{AB} |
|
// la même figure que précédemment en exploitant // l'extension geometry de Philippe Ivaldi // import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7cm,0); // Notez le paramètre suivant, par défaut est à 0, qui permet de définir la // distance des représentations de droites par rapport aux bords de l'image. linemargin =-1cm; // Avec une valeur négative, cela aggrandit la taille de l'image. // Plus pratique : addmargins, à voir dans des exemples qui suivent. // définition de 2 points point pA=(1,1),pB=(4,0); // Construction des points correspondants dot("$A$",pA,SW); dot("$B$",pB,NE); // On trace la droite (AB) draw(line(pA,pB)); |
|
// Encore la même figure... // import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7cm,0); point pA=(1,1),pB=(4,0); dot("$A$",pA,SW); dot("$B$",pB,NE); draw(line(pA,pB)); /* Plus pratique qu'un linemargin négatif utilisé précédemment ou que la solution d'un cadre invisible, on pensera à utiliser : addMargins(picture pic=currentpicture, real lmargin=0, real bmargin=0, real rmargin=lmargin, real tmargin=bmargin, bool rigid=true, bool allObject=true) */ addMargins(1cm,1cm); // et on peut en plus utiliser linemargin, mais positif cette fois // pour que les droites n'aillent pas jusqu'aux bords de l'image. linemargin=2mm; |
|
// import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7cm,0); // définition de 4 points point pA=(1,1),pB=(4,2),pC=(5,4),pD=(2,3); // ... et construction du quadrilatère draw(pA--pB--pC--pD--cycle,red); // On trace la droite passant par pB et pD, en bleu. draw(line(pB,pD),blue); // ... et la droite passant par pA et pC, en vert draw(line(pA,pC),green); // La boundingbox (fenêtre d'affichage) est définie // par les coordonnées extrêmes des points... |
|
// import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7cm,0); // même figure que précédemment... point pA=(1,1),pB=(4,2),pC=(5,4),pD=(2,3); draw(pA--pB--pC--pD--cycle,red); draw(line(pB,pD),blue); draw(line(pA,pC),green); // mais on définit un cadre invisible draw(box((0,0),(6,5)), invisible); |
|
// import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7cm,0); // même figure que précédemment... point pA=(1,1),pB=(4,2),pC=(5,4),pD=(2,3); draw(pA--pB--pC--pD--cycle,red); draw(line(pB,pD),blue); // cette fois, avec l'indication false suivant pA // on obtient une demi-droite. draw(line(pA,false,pC),green); // un point noir pour indiquer pA dot(pA); // On définit un cadre invisible draw(box((0,0),(6,5)), invisible); |
|
// import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7cm,0); // même figure que précédemment... point pA=(1,1),pB=(4,2),pC=(5,4),pD=(2,3); draw(pA--pB--pC--pD--cycle,red); draw(line(pB,pD),blue); draw(line(pA,false,pC),green); dot(pA); // ... mais plus pratique qu'un linemargin négatif utilisé précédemment // ou que la solution d'un cadre invisible, on pensera à utiliser : // addMargins(picture pic=currentpicture, // real lmargin=0, real bmargin=0, // real rmargin=lmargin, real tmargin=bmargin, // bool rigid=true, bool allObject=true) addMargins(1cm,1cm); // et on pourra en plus utiliser linemargin, mais positif cette fois // pour que les droites n'aillent pas jusqu'aux bords de l'image. linemargin=2mm; |
|
/* Droite définie par équation cartésienne ax+by+c=0 dans le repère R Syntaxe : line line(coordsys R=currentcoordsys, real a, real b, real c) ou Droite définie par équation réduite y=mx+p dans le repère R Syntaxe : line line(coordsys R=currentcoordsys, real slope, real origin) */ // import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7cm,0); // Affichage du repère courant show(currentcoordsys); // Tracé de la droite d'équation x + 2y - 3 = 0 line d1=line(1,3,-3); draw(d1,blue); // Tracé de la droite d'équation y = 2x - 3 line d2=line(2,-3); draw(d2,.8green); // Point d'intersection des deux droites dot("I",intersectionpoint(d1,d2),N,.7red); draw(box((-2,-2),(5,4)),invisible); |
|
/* Droite parallèle à une droite donnée passant par un point donné */ // import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7cm,0); // Affichage du repère courant show(currentcoordsys); // Tracé de la droite d'équation y = 2x - 3 line d1=line(2,-3); draw(d1,.8blue); // Point A de coordonnées (4,1) point pA=(4,1); dot("A",pA); // Parallèle à d1 passant par A line d2=parallel(pA,d1); draw(d2,.8green); draw(box((-2,-2),(5,4)),invisible); |
|
/* Droite perpendiculaire à une droite donnée passant par un point donné */ // import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7cm,0); // Affichage du repère courant show(currentcoordsys); // Tracé de la droite d'équation y = 2x - 3 line d1=line(2,-3); draw(d1,.8blue); // Point A de coordonnées (4,1) point pA=(4,1); dot("A",pA,NE); // Perpendiculaire à d1 passant par A line d2=perpendicular(pA,d1); draw(d2,.8green); // Codage de l'angle droit perpendicularmark(d1,d2); draw(box((-2,-2),(5,4)),invisible); |
|
/* Médiatrice d'un segment en utilisant la fonction bisector de l'extension geometry_dev. */ // import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7cm,0); // Affichage du repère courant show(currentcoordsys); // Définition de deux points A et B point pA=(4,1), pB=(1,3); // ... puis de la médiatrice de [AB] line medAB=bisector(pA,pB); // On trace le tout : dot("A",pA,NE); dot("B",pB,SW); draw(pA--pB,1bp+blue,StickIntervalMarker(2,2, 0.8*blue)); draw(medAB,dashed+.8bp+red); // Codage de l'angle droit perpendicularmark(line(pA,pB),medAB); draw(box((-2,-2),(5,4)),invisible); |
|
/* Un exemple commenté issu de la documentation de l'extension geometry de Ph. Ivaldi illustrant des emplois possibles de la fonction **line** (à ne pas confondre avec le type **line**). */ // import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7.5cm,0); // Pour que les lignes n'aillent pas jusqu'aux bords de l'image : linemargin=2mm; // Définition et placement de 4 points : point A=(0,0), B=(2, 0), C=(3,1), D=(1,1); dot("A", A, NW); dot("B", B, SE); dot("C", C); dot("D", D, W); // Définition d'une droite line AB=line(A, B); // Définition d'une demi-droite line CB=line(C, false, B); // Définition d'un segment line CD=line(C, false, D, false); // Définition d'une demi-droite line AD=line(A, false, D); // Tracé des lignes précédentes draw("(AB)", AB); draw("[CB)", CB); draw(Label("[CD]",Relative(0.5),align=N), CD); draw("[AD)", AD); // Un cadre invisible pour définir la zone à afficher. draw(box((-1,-2),(4,3)),invisible); |
|
/* Même figure que précédemment avec 2 différences : - des labels au format mathématique de LaTeX - utilisation de addMargins pour définir la zone d'affichage. */ // import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) size(7.5cm,0); point A=(0,0), B=(2, 0), C=(3,1), D=(1,1); dot("$A$", A, NW); dot("$B$", B, SE); dot("$C$", C); dot("$D$", D, W); line AB=line(A, B); line CB=line(C, false, B); line CD=line(C, false, D, false); line AD=line(A, false, D); draw("$(AB)$", AB); draw("$[CB)$", CB); draw(Label("$[CD]$",Relative(0.5),align=N), CD); draw("$[AD)$", AD); // Marge de 1cm à gauche du point le plus à gauche // Marge de 2cm en dessous du point le plus bas // Marge de 1.5cm à droite du point le plus à droite // Marge de 2.5cm au dessus du point le plus haut addMargins(1cm,2cm,1.5cm,2.5cm); // et je remets linemargin pour que les droites n'aillent pas // jusqu'aux bords de l'image linemargin = 2mm; |
|
import geometry; import patterns; size(7.5cm,0); // On définit : point pA=(2,2), pB=(3,1.5), pC=(1.5,-1); line droite1=line(pA,pB); segment bord1=segment(relpoint(droite1,-.5),relpoint(droite1,1.5)); path zonehachuree1=bord1.A--bord1.B--(bord1.B.x,bord1.A.y)--cycle; line droite2=line(pB,pC); segment bord2=segment(relpoint(droite2,-.2),relpoint(droite2,1.2)); path zonehachuree2=bord2.A--bord2.B--(bord2.A.x,bord2.B.y)--cycle; // On trace : show(currentcoordsys); dot("A",pA,S); dot("B",pB,W); dot("C",pC,NW); draw(droite1^^droite2,red); add("hachure1",hatch(H=3mm,dir=NE,red)); fill(zonehachuree1,pattern("hachure1")); add("hachure2",hatch(H=2mm,dir=NW,blue)); fill(zonehachuree2,pattern("hachure2")); addMargins(.1cm,.1cm); |
|
// import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) import graph_pi; unitsize(1.5cm,1.5cm); scale(false); real xmin=-2, xmax=3, ymin=-3, ymax=4; grid(xmin, xmax, ymin, ymax, xStep=1, xstep=.5, yStep=1, ystep=.5, pTick=.7bp+.7white, ptick=.7bp+dotted+.7white, above=false ); draw((xmin,0)--(xmax,0)^^(0,ymin)--(0,ymax), 1.3bp+0.7*grey); labeloij(p=1.7bp+.5*red, arrow=Arrow(SimpleHead,8bp), scale(2)*Mark(5) ); line d1=line(2,-2); draw(Label("$(d_1)$",Relative(.95),align=NW), d1, 1bp+solid+.5blue); line d2=line(-1,2); draw(Label("$(d_2)$",Relative(.95),align=SW), d2, 1bp+dashed+.8red); line d3=line(1/5,-1); draw(Label("$(d_3)$",Relative(.05),align=N), d3, 1bp+dotted+.8green); |
|
// import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) unitsize(1cm); // ~~~~~~ DEFINITIONS ~~~~~~~~~~~~~~~~~~~~~~ pair pO=(0,0), pI=(1,0), pJ=rotate(45,pO)*pI; line d1 = line(pO,pI); line d2 = line(pO,pJ); // Définition d'un repère non orthogonal currentcoordsys = cartesiansystem(pO,i=pI,j=pJ); int n1min=-2, n1max=5, n2min=-3, n2max=6; point pA=(2,0), pB=(4,0), pC=(0,3), pD=(0,5); // ~~~~~~ CONSTRUCTIONS ~~~~~~~~~~~~~~~~~~~~~~ label("$O$",pO,S); draw(d1^^d2); for (int i=n1min; i <= n1max; ++i) { dot(locate((i,0)));write(i); } for (int i=n2min; i <= n2max; ++i) { dot(locate((0,i))); } dot("$A$",pA,S); dot("$B$",pB,S); dot("$C$",pC,NW); dot("$D$",pD,NW); shipout(bbox(xmargin = 1mm,invisible)); |
|
// La même figure que la précédente // mais en utilisant l'instruction **sequence** // Rappel d'un extrait de la documentation officielle : /* int[] sequence(int n) if n >= 1 returns the array {0,1,...,n-1} (otherwise returns a null array); */ /* int[] sequence(int n, int m) if m >= n returns an array {n,n+1,...,m} (otherwise returns a null array); */ /* T[] sequence(T f(int), int n) if n >= 1 returns the sequence {f_i :i=0,1,...n-1} given a function T f(int) and integer int n (otherwise returns a null array); */ // import geometry_dev; // extension devenue l'extension geometry officielle import geometry; // le 12/05/09, dans la version 1.71 d'asymptote. :-)) unitsize(1cm); // ~~~~~~ DEFINITIONS ~~~~~~~~~~~~~~~~~~~~~~ pair pO=(0,0), pI=(1,0), pJ=rotate(45,pO)*pI; line d1 = line(pO,pI); line d2 = line(pO,pJ); currentcoordsys = cartesiansystem(pO,i=pI,j=pJ); int n1min=-2, n1max=5, n2min=-3, n2max=6; point pA=(2,0), pB=(4,0), pC=(0,3), pD=(0,5); // ~~~~~~ CONSTRUCTIONS ~~~~~~~~~~~~~~~~~~~~~~ label("$O$",pO,S); draw(d1^^d2); point f(int i){return locate((i+n1min,0));}; point[] pM1=sequence(f,n2max-n2min+1); dot(pM1); point g(int i){return locate((0,i+n2min));}; point[] pM2=sequence(g,n2max-n2min+1); dot(pM2); dot("$A$",pA,S); dot("$B$",pB,S); dot("$C$",pC,NW); dot("$D$",pD,NW); shipout(bbox(xmargin = 1mm,invisible)); |
|
size(7.5cm,0); path ligne=(-3,1)..(-1,2)..(4,0); draw(ligne,blue); dot(ligne,red); shipout(bbox(3mm,white)); |
|
size(7.5cm,0); path ligne=(-3,1){right}..(-1,2)..(4,0); draw(ligne,blue); dot(ligne,red); shipout(bbox(3mm,white)); |
|
size(7.5cm,0); path ligne=(-3,1)..{dir(-45)}(-1,2)..{right}(4,0); draw(ligne,blue); dot(ligne,red); shipout(bbox(3mm,white)); |
|
size(7.5cm,0); path ligne=(-3,1)..{dir(45)}(-1,2){dir(-45)}..(4,0); draw(ligne,blue); dot(ligne,red); shipout(bbox(3mm,white)); |
|
unitsize(1cm); pair z0=(0,0), z1=(7,0), c0=(1,2), c1=(5,3); // Courbe (spline) de Bézier ... // ... cubique (définie par 4 points). path CourbeBezier = z0 .. controls c0 and c1 .. z1; // Pour info : la forme paramétrique de la courbe est // z(t) = z0 (1-t)^3 + 3 c0 t(1-t)^2 + 3 c1 t^2(1-t) + z1 t^3 // avec t compris entre 0 et 1. draw(CourbeBezier,2bp+blue); path lignebrisee = z0 -- c0 -- c1 -- z1; draw(lignebrisee,dashed); // en pointillés... dot(lignebrisee,5bp+red); // ... et les points en rouge. // Pour finir, on ajoute le nom des points. label("$z_0$",z0,S); label("$z_1$",z1,S); label("$c_0$",c0,N); label("$c_1$",c1,N); shipout(bbox(3mm,white)); |
|
// La figure précédente avec cette fois c1 confondu avec c0. unitsize(1cm); pair z0=(0,0), z1=(7,0), c=(1,2); // Courbe (spline) de Bézier (cubique), // dans le cas où les deux points de contrôle sont confondus. path CourbeBezier = z0 .. controls c .. z1; // Pour info : la forme paramétrique de la courbe est // z(t) = z0 (1-t)^3 + 3 c t(1-t) + z1 t^3 // avec t compris entre 0 et 1. draw(CourbeBezier,2bp+blue); path lignebrisee = z0 -- c -- z1; draw(lignebrisee,dashed); // en pointillés... dot(lignebrisee,5bp+red); // ... et les points en rouge. // Pour finir, on ajoute le nom des points. label("$z_0$",z0,S); label("$z_1$",z1,S); label("$c$",c,N); shipout(bbox(3mm,white)); |
|
unitsize(1cm); pair z0=(0,0), z1=(7,0), c0=(1,3), c1=(5,5); // On déduit du quadruplet de points précédents (z0, c0, c1, z1) // (par construction de 6 milieux) le point z2 sur la courbe de bézier. // En procédant de même pour les quadruplets (z0, m0, m3, z2) // et (z2, m4, m2, z1), on obtiendrait deux nouveaux points de la courbe, // et c'est en continuant ainsi, par récursivité, que la courbe est construite. pair m0=(z0+c0)/2, m1=(c0+c1)/2, m2=(c1+z1)/2, m3=(m0+m1)/2, m4=(m1+m2)/2, z2=(m3+m4)/2; // Courbe (spline) de Bézier cubique (définie par 4 points). path CourbeBezier = z0 .. controls c0 and c1 .. z1; draw(CourbeBezier,2bp+blue); // Les traits et points de construction path lignebrisee = z0 -- c0 -- c1 -- z1; draw(lignebrisee^^m0--m1--m2^^m3--m4,dashed); dot(lignebrisee^^m0--m1--m2^^m3--m4^^z2,5bp+red); // Pour finir, on ajoute le nom des points. label("$z_0$",z0,S); label("$z_1$",z1,S); label("$c_0$",c0,N); label("$c_1$",c1,N); label("$m_0$",m0,NW); label("$m_1$",m1,N); label("$m_2$",m2,NE); label("$m_3$",m3,N); label("$m_4$",m4,N); label("$z_2$",z2,N); shipout(bbox(3mm,white)); |
|
// Le même exemple que celui ci-dessus, // avec des instructions de l'extension geometry. import geometry; unitsize(1cm); point z0=(0,0), c0=(1,3), c1=(5,5), z1=(7,0); segment z0c0=segment(z0,c0), c0c1=segment(c0,c1), c1z1=segment(c1,z1); point m0=midpoint(z0c0), m1=midpoint(c0c1), m2=midpoint(c1z1); segment m0m1=segment(m0,m1), m1m2=segment(m1,m2); point m3=midpoint(m0m1), m4=midpoint(m1m2); segment m3m4=segment(m3,m4); point z2=midpoint(m3m4); // Courbe (spline) de Bézier cubique (définie par 4 points). path CourbeBezier = z0 .. controls c0 and c1 .. z1; draw(CourbeBezier,2bp+blue); // Les traits de construction. draw(z0c0^^c0c1^^c1z1^^m0m1^^m1m2^^m3m4,dashed); // Pour finir, on place les points en les étiquetant. dot("$z_0$",z0,S,red); dot("$z_1$",z1,S,red); dot("$c_0$",c0,N,green); dot("$c_1$",c1,N,green); dot("$m_0$",m0,NW); dot("$m_1$",m1,N); dot("$m_2$",m2,NE); dot("$m_3$",m3,N); dot("$m_4$",m4,N); dot("$z_2$",z2,N,purple); shipout(bbox(3mm,white)); |
|
/* Trois fonctions à connaitre : arctime, dirtime, reltime. Illustrons dans cet exemple l'utilisation de arctime. real arctime(path p, real L); returns the path "time", a real number between 0 and the length of the path in the sense of point(path p, real t), at which the cumulative arclength (measured from the beginning of the path) equals L. */ size(7.5cm,0); path ligne=(-3,1){dir(45)}..(-1,2)..{dir(10)}(4,0); real at1=arctime(ligne,0), at2=arctime(ligne,1.156), at3=arctime(ligne,2.292208), at4=arctime(ligne,5.068), at5=arctime(ligne,7.810541); draw(ligne,blue); label(format("nombre de noeuds du chemin = %i",size(ligne)),(0,7)); label(format("nombre de sections du chemin = %i",length(ligne)),(0,6)); label(format("longueur du chemin = %f",arclength(ligne)),(0,5)); label(format("longueur de la section 1 = %f",arclength(subpath(ligne,0,1))),(0,4)); label(format("longueur de la section 2 = %f",arclength(subpath(ligne,1,2))),(0,3)); label(format("arctime(ligne,0) = %f",at1),(0,-1)); label(format("arctime(ligne,1.156) = %f",at2),(0,-2)); label(format("arctime(ligne,2.292208) = %f",at3),(0,-3)); label(format("arctime(ligne,5.068) = %f",at4),(0,-4)); label(format("arctime(ligne,7.810541) = %f",at5),(0,-5)); pen p1,p2=blue; for (real k=0; k<=length(ligne); k+=0.5) { real absc=arclength(subpath(ligne,0,k)); if (k == floor(k)) { p1=4bp+red; } else { p1=2bp+green; } dot(Label(format("%.3f",absc)),point(ligne,k),2N,p1); label(Label(format("%.3f",arctime(ligne,absc))),point(ligne,k),2S,p2); } shipout(bbox(3mm,white)); |
|
/* Trois fonctions à connaitre : arctime, dirtime, reltime Illustrons dans cet exemple l'utilisation de dirtime. real dirtime(path p, pair z); returns the first "time", a real number between 0 and the length of the path in the sense of point(path, real), at which the tangent to the path has the direction of pair z, or -1 if this never happens. */ size(7.5cm,0); path ligne=(-3,1){dir(45)}..(-1,2)..{dir(10)}(4,0); real dt1=dirtime(ligne,(2,-2)), dt2=dirtime(ligne,(2,-1)), dt3=dirtime(ligne,(2,0)), dt4=dirtime(ligne,(2,1)), dt5=dirtime(ligne,(2,2)); draw(ligne,blue); label(format("nombre de noeuds du chemin = %i",size(ligne)),(0,6)); label(format("nombre de sections du chemin = %i",length(ligne)),(0,5)); label(format("longueur du chemin = %f",arclength(ligne)),(0,4)); label(format("dirtime(ligne,(2,-2)) = %f",dt1),(0,-1)); label(format("dirtime(ligne,(2,-1)) = %f",dt2),(0,-2)); label(format("dirtime(ligne,(2,0)) = %f",dt3),(0,-3)); label(format("dirtime(ligne,(2,1)) = %f",dt4),(0,-4)); label(format("dirtime(ligne,(2,2)) = %f",dt5),(0,-5)); draw(Label("(2,-1)",EndPoint),point(ligne,dt2)--point(ligne,dt2)+(2,-1),red,Arrow); draw(Label("(2,0)",EndPoint),point(ligne,dt3)--point(ligne,dt3)+(2,0),blue,Arrow); draw(Label("(2,1)",EndPoint),point(ligne,dt4)--point(ligne,dt4)+(2,1),green,Arrow); draw(Label("(2,2)",EndPoint),point(ligne,dt5)--point(ligne,dt5)+(2,2),purple,Arrow); dot(Label(format("%.3f",dt2)),point(ligne,dt2),2S); dot(Label(format("%.3f",dt3)),point(ligne,dt3),2S); dot(Label(format("%.3f",dt4)),point(ligne,dt4),2S); dot(Label(format("%.3f",dt5)),point(ligne,dt5),2S); shipout(bbox(3mm,white)); |
|
/* Trois fonctions à connaitre : arctime, dirtime, reltime Illustrons dans cet exemple l'utilisation de reltime. real reltime(path p, real l); returns the time on path p at the relative fraction l of its arclength. */ size(7.5cm,0); path ligne=(-3,1){dir(45)}..(-1,2)..{dir(10)}(4,0); real rt1=reltime(ligne,0), rt2=reltime(ligne,.25), rt3=reltime(ligne,.50), rt4=reltime(ligne,.75), rt5=reltime(ligne,1); draw(ligne,blue); label(format("nombre de noeuds du chemin = %i",size(ligne)),(0,7)); label(format("nombre de sections du chemin = %i",length(ligne)),(0,6)); label(format("longueur du chemin = %f",arclength(ligne)),(0,5)); label(format("longueur de la section 1 = %f",arclength(subpath(ligne,0,1))),(0,4)); label(format("longueur de la section 2 = %f",arclength(subpath(ligne,1,2))),(0,3)); label(format("reltime(ligne,0) = %f",rt1),(0,-1)); label(format("reltime(ligne,0.25) = %f",rt2),(0,-2)); label(format("reltime(ligne,0.5) = %f",rt3),(0,-3)); label(format("reltime(ligne,0.75) = %f",rt4),(0,-4)); label(format("reltime(ligne,1) = %f",rt5),(0,-5)); pen p1=.9green,p2=blue; for (real k=0; k<=1; k+=0.25) { dot(Label(format("%.3f",k)),relpoint(ligne,k),2N,p1); label(Label(format("%.3f",reltime(ligne,k))),relpoint(ligne,k),2S,p2); label(Label(format("%.3f",reltime(ligne,k))),relpoint(ligne,k),2S,p2); } dot(ligne,4bp+red); shipout(bbox(3mm,white)); |
Dernière modification le Sat May 22 21:59:05 CEST 2010 par G.Marris Valide XHTML