CONTOURS - DOMAINES (26)
Liste des figures
Figure fig_aa01_300308_domaine_plan
figure 0001
Figure fig_aa02_300308_domaine_plan
figure 0002
Figure fig_aa03_300308_domaine_plan
figure 0003
Figure fig_aa04_300308_domaine_plan
figure 0004
Figure fig_aa05_100408_domaine_plan
figure 0005
Figure fig_aw01_261011_windingnumber
figure 0006
Figure fig_aw02_261011_windingnumber
figure 0007
Figure fig_bc01_300309_buildcycle
figure 0008
Figure fig_bc02_300309_buildcycle
figure 0009
Figure fig_bc03_300309_buildcycle
figure 0010
Figure fig_bc04_300309_buildcycle
figure 0011
Figure fig_bc05_300309_buildcycle
figure 0012
Figure fig_ca01_291009_clipping_decoupage
figure 0013
Figure fig_fi01_030410_filloutside
figure 0014
Figure fig_fi11_030410_unfill
figure 0015
Figure fig_ga01_210608_gouraud
figure 0016
Figure fig_ga02_210608_gouraud
figure 0017
Figure fig_ga03_210608_gouraud
figure 0018
Figure fig_ga04_210608_gouraud
figure 0019
Figure fig_ga05_210608_gouraud
figure 0020
Figure fig_sh01_030410_axialshade
figure 0021
Figure fig_sh11_030410_radialshade
figure 0022
Figure fig_sh12_030410_radialshade
figure 0023
Figure fig_sh13_030410_radialshade
figure 0024
Figure fig_sh14_030410_radialshade
figure 0025
Figure fig_sh15_030410_radialshade
figure 0026
Asymptote - Figure 0001: fig_aa01_300308_domaine_plan.asy
(Code compilé avec Asymptote version 2.14svn)
largeur320 Figure fig_aa01_300308_domaine_plan
/* On appelle **contour**, une courbe fermée sans point de self-intersection.
   Tout contour partage le plan en deux domaines (il en est la frontière) :
   - le domaine borné est appelé **intérieur du contour**,
   - l'autre domaine est appelé **extérieur du contour**.
   Un domaine est dit "simplement connexe" si l'intérieur de chacun
   de ses contours appartient au domaine.
   Un domaine qui n'est pas simplement connexe est dit "multiplement connexe".
*/      
size(7.5cm,0);
path c1=unitcircle,
     c2=scale(1.5)*unitcircle,
     c3=scale(2)*unitcircle;
path[] c={c1,c2,c3};

// La régle de remplissage par défaut est *zerowinding* 
// pen zerowinding=fillrule(0);
filldraw(c,palegreen,black);
// On aurait pu écrire : filldraw(c,palegreen+zerowinding,black);

// On peut remplacer la valeur par défaut par *evenodd*
// pen evenodd=fillrule(1);
filldraw(shift(5,0)*c,palered+evenodd,black);

shipout(bbox(5mm,white));
Asymptote - Figure 0002: fig_aa02_300308_domaine_plan.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_aa02_300308_domaine_plan
size(7.5cm,0);
path c1=unitcircle,
     c2=shift(.25,0)*unitcircle;
path[] c={c1,c2};

// La régle de remplissage par défaut est *zerowinding* 
// pen zerowinding=fillrule(0);
filldraw(c,palegreen,black);
// On aurait pu écrire : filldraw(c,palegreen+zerowinding,black);

// On peut remplacer la valeur par défaut par *evenodd*
// pen evenodd=fillrule(1);
filldraw(shift(2.5,0)*c,palered+evenodd,black);

shipout(bbox(5mm,white));
Asymptote - Figure 0003: fig_aa03_300308_domaine_plan.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_aa03_300308_domaine_plan
size(7.5cm,0);
path c1=unitcircle,
     c2=shift(1,0)*scale(1.5)*unitcircle,
     c3=scale(2)*unitcircle;
path[] c={c1,c2,c3};

filldraw(c,palegreen,black);

filldraw(shift(5,0)*c,palered+evenodd,black);

shipout(bbox(5mm,white));
Asymptote - Figure 0004: fig_aa04_300308_domaine_plan.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_aa04_300308_domaine_plan
size(7.5cm,0);

path c1=circle((.5,.5),.6),
     c2=unitsquare,
     c3=shift(1.5,0)*c1,
     c4=shift(1.5,0)*c2;

filldraw(c1^^c2,yellow+evenodd,black);

filldraw(c3^^c4,yellow,black);

shipout(bbox(5mm,white));
Asymptote - Figure 0005: fig_aa05_100408_domaine_plan.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_aa05_100408_domaine_plan
size(7cm,0);

path c1=circle((.5,1),1),
     c2=unitsquare,
     c3=(0,0)--(2,1)--(1,2)--cycle;

filldraw(c1^^c2^^c3,yellow+evenodd,.8bp+white);

shipout(bbox(5mm,Fill(.3blue)));
Asymptote - Figure 0006: fig_aw01_261011_windingnumber.asy
(Code compilé avec Asymptote version 2.14svn)
largeur320 Figure fig_aw01_261011_windingnumber
// Une fonction méconnue : windingnumber
// Premier exemple pour la comprendre.

size(8cm,0);
path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(0,1)..(-.5,.8)..cycle;
dot(chemin,5bp+.5green);
draw(chemin,Arrow());

pair z;
for(int k=0; k<50; ++k){
      z=(-.75+2*unitrand(),-.75+2*unitrand());
      dot(string(windingnumber(chemin,z)),z,.1E,1bp+red);
}
z=point(chemin,4.3);
dot(string(windingnumber(chemin,z)),z,.3E,5bp+blue);

label("windingnumber(path, pair)",truepoint(N),N);
label("undefined = "+string(undefined),truepoint(S),S);
Asymptote - Figure 0007: fig_aw02_261011_windingnumber.asy
(Code compilé avec Asymptote version 2.14svn)
largeur320 Figure fig_aw02_261011_windingnumber
// Une fonction méconnue : windingnumber
// Deuxième exemple pour la comprendre.

size(8cm,0);
path chemin=reverse((0,0){dir(45)}..(1,0)..(1,.5)..(0,1)..(-.5,.8)..cycle);

dot(chemin,5bp+.5green);
draw(chemin,Arrow());

pair z;
for(int k=0; k<50; ++k){
      z=(-.75+2*unitrand(),-.75+2*unitrand());
      dot(string(windingnumber(chemin,z)),z,.1E,1bp+red);
}
z=point(chemin,1.5);
dot(string(windingnumber(chemin,z)),z,.3E,5bp+blue);

label("windingnumber(path, pair)",truepoint(N),N);
label("undefined = "+string(undefined),truepoint(S),S);
Asymptote - Figure 0008: fig_bc01_300309_buildcycle.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_bc01_300309_buildcycle
// Une série d'exemples pour comprendre le fonctionnement de buildcycle.

// Dans cet exemple, buildcycle(c1,c2) permet de construire l'intersection
// des ensembles... mais ne pas croire que c'est toujours le cas : cf. exemple qui suit.
size(7.8cm,0);
// Je définis un chemin c1 et un second c2 déduit par translation.
path c1=(0,0)..(1.5,0)..(2,1.5)..(-1,1)..cycle;
path c2=shift(-1.5,.6)*c1;
// c3 est le chemin cyclique résultant de la fonction buildcycle
// appliquée à c1 et c2 dans cet ordre.
path c3=buildcycle(c1,c2);
// On colorie la zone définie par c3 et on dessine les ensembles.
fill(c3,palegreen);
draw(c1,2bp+blue); draw(c2,2bp+red); draw(c3,.9bp+yellow);
// On étiquette les noeuds des trois chemins pour 
// bien comprendre comment est construit c3 à partir de c1 et c2.
defaultpen(fontsize(14pt));
real w=linewidth();
for(int i=0; i<length(c1); ++i) 
    dot(string(i),point(c1,i),SW,linewidth(12w)+.7blue);
for(int i=0; i<length(c2); ++i) 
    dot(string(i),point(c2,i),SW,linewidth(12w)+.7red);
for(int i=0; i<length(c3); ++i) 
    dot(string(i),point(c3,i),E,linewidth(6w)+.9green);
Asymptote - Figure 0009: fig_bc02_300309_buildcycle.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_bc02_300309_buildcycle
// Le même exemple que précédemment : seule la translation qui permet
// de construire c2 change ! On constate que, cette fois, buildcycle(c1,c2) 
// permet de construire la réunion des ensembles.
size(7.8cm,0);
// Je définis un chemin c1 et un second c2 déduit par translation.
path c1=(0,0)..(1.5,0)..(2,1.5)..(-1,1)..cycle;
path c2=shift(-.25,-.75)*c1;
// c3 est le chemin cyclique résultant de la fonction buildcycle
// appliquée à c1 et c2 dans cet ordre.
path c3=buildcycle(c1,c2);
// On colorie la zone définie par c3 et on dessine les ensembles.
fill(c3,palegreen);
draw(c1,2bp+blue); draw(c2,2bp+red); draw(c3,.9bp+yellow);
// On étiquette les noeuds des trois chemins pour 
// bien comprendre comment est construit c3 à partir de c1 et c2.
defaultpen(fontsize(14pt));
real w=linewidth();
for(int i=0; i<length(c1); ++i) 
    dot(string(i),point(c1,i),SW,linewidth(12w)+.7blue);
for(int i=0; i<length(c2); ++i) 
    dot(string(i),point(c2,i),SW,linewidth(12w)+.7red);
for(int i=0; i<length(c3); ++i) 
    dot(string(i),point(c3,i),E,linewidth(6w)+.9green);
Asymptote - Figure 0010: fig_bc03_300309_buildcycle.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_bc03_300309_buildcycle
// Un autre d'exemple pour comprendre le fonctionnement de buildcycle.
// Attention les chemins sont orientés ! Pour bien le comprendre, cet exemple 
// est la reprise de l'exemple fig_bc01, mais en changeant l'orientation de c2.
size(7.8cm,0);
// Je définis un chemin c1 et un second c2 déduit par translation.
path c1=(0,0)..(1.5,0)..(2,1.5)..(-1,1)..cycle;
path c2=reverse(shift(-1.5,.6)*c1);
// c3 est le chemin cyclique résultant de la fonction buildcycle
// appliquée à c1 et c2 dans cet ordre.
path c3=buildcycle(c1,c2);
// On colorie la zone définie par c3 et on dessine les ensembles.
fill(c3,palegreen);
draw(c1,2bp+blue); draw(c2,2bp+red); draw(c3,.9bp+yellow);
// On étiquette les noeuds des trois chemins pour 
// bien comprendre comment est construit c3 à partir de c1 et c2.
defaultpen(fontsize(14pt));
real w=linewidth();
for(int i=0; i<length(c1); ++i) 
    dot(string(i),point(c1,i),SW,linewidth(12w)+.7blue);
for(int i=0; i<length(c2); ++i) 
    dot(string(i),point(c2,i),SW,linewidth(12w)+.7red);
for(int i=0; i<length(c3); ++i) 
    dot(string(i),point(c3,i),E,linewidth(6w)+.9green);
Asymptote - Figure 0011: fig_bc04_300309_buildcycle.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_bc04_300309_buildcycle
// Une série d'exemples pour comprendre le fonctionnement de buildcycle.
// Attention les chemins sont orientés ! Pour bien le comprendre, cet exemple 
// est la reprise de l'exemple fig_bc02, mais en changeant l'orientation de c2.
size(7.8cm,0);
// Je définis un chemin c1 et un second c2 déduit par translation.
path c1=(0,0)..(1.5,0)..(2,1.5)..(-1,1)..cycle;
path c2=reverse(shift(-.25,-.75)*c1);
// c3 est le chemin cyclique résultant de la fonction buildcycle
// appliquée à c1 et c2 dans cet ordre.
path c3=buildcycle(c1,c2);
// On colorie la zone définie par c3 et on dessine les ensembles.
fill(c3,palegreen);
draw(c1,2bp+blue); draw(c2,2bp+red); draw(c3,.9bp+yellow);
// On étiquette les noeuds des trois chemins pour 
// bien comprendre comment est construit c3 à partir de c1 et c2.
defaultpen(fontsize(14pt));
real w=linewidth();
for(int i=0; i<length(c1); ++i) 
    dot(string(i),point(c1,i),SW,linewidth(12w)+.7blue);
for(int i=0; i<length(c2); ++i) 
    dot(string(i),point(c2,i),SW,linewidth(12w)+.7red);
for(int i=0; i<length(c3); ++i) 
    dot(string(i),point(c3,i),E,linewidth(6w)+.9green);
Asymptote - Figure 0012: fig_bc05_300309_buildcycle.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_bc05_300309_buildcycle
// Le dernier exemple de cette série : reprise du premier exemple,
// en ayant remplacé buildcycle(c1,c2) par buildcycle(c2,c1).
// Il faut constater que si la zone définie par c3 est la même,
// il ne s'agit pas du même chemin pour autant : regarder le numéro
// des noeuds pour s'en convaincre.
size(7.8cm,0);
// Je définis un chemin c1 et un second c2 déduit par translation.
path c1=(0,0)..(1.5,0)..(2,1.5)..(-1,1)..cycle;
path c2=shift(-1.5,.6)*c1;
// c3 est le chemin cyclique résultant de la fonction buildcycle
// appliquée à c1 et c2 dans cet ordre.
path c3=buildcycle(c2,c1);
// On colorie la zone définie par c3 et on dessine les ensembles.
fill(c3,palegreen);
draw(c1,2bp+blue); draw(c2,2bp+red); draw(c3,.9bp+yellow);
// On étiquette les noeuds des trois chemins pour 
// bien comprendre comment est construit c3 à partir de c1 et c2.
defaultpen(fontsize(14pt));
real w=linewidth();
for(int i=0; i<length(c1); ++i) 
    dot(string(i),point(c1,i),SW,linewidth(12w)+.7blue);
for(int i=0; i<length(c2); ++i) 
    dot(string(i),point(c2,i),SW,linewidth(12w)+.7red);
for(int i=0; i<length(c3); ++i) 
    dot(string(i),point(c3,i),E,linewidth(6w)+.9green);
Asymptote - Figure 0013: fig_ca01_291009_clipping_decoupage.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_ca01_291009_clipping_decoupage
size(7cm,0);
path cercle2=scale(2)*unitcircle, // cercle de rayon 2
     cercle3=scale(3)*unitcircle; // cercle de rayon 3
         
// Définition d'une croix à 8 branches, inscrite dans cercle de rayon 3
path croix=scale(3)*cross(8,round=false,r=0.5);

fill(croix,orange); // On colorie la croix...
clip(cercle2); // ... puis on efface la partie de la croix en dehors du cercle2.

// On dessine la croix complète en vert ...
draw(croix,green);
// ... et les deux cerclesen pointillés.
draw(cercle2^^cercle3,dashed);
Asymptote - Figure 0014: fig_fi01_030410_filloutside.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_fi01_030410_filloutside
size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(0,1)..cycle;

filloutside(chemin,red);

shipout(bbox(3mm,white));
Asymptote - Figure 0015: fig_fi11_030410_unfill.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_fi11_030410_unfill
size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(0,1)..cycle;

fill(scale(1)*unitcircle,red);
unfill(chemin);
draw(chemin,dashed+gray);

shipout(bbox(3mm,white));
Asymptote - Figure 0016: fig_ga01_210608_gouraud.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_ga01_210608_gouraud
size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(0,1)..cycle;

pen[] p={red,green,blue,magenta};
int[] edge_flag={0,0,0,1};
draw(chemin);
gouraudshade(chemin,p,edge_flag);
dot(chemin);
Asymptote - Figure 0017: fig_ga02_210608_gouraud.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_ga02_210608_gouraud
size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(0,1)..cycle;

pen[] p={red,green,blue,magenta};
int[] edge_flag={0,0,0,2};
draw(chemin);
gouraudshade(chemin,p,edge_flag);
dot(chemin);
Asymptote - Figure 0018: fig_ga03_210608_gouraud.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_ga03_210608_gouraud
size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(0,1)..cycle;

pen[] p={red,green,blue,magenta};
pair[] points={(0,0),(1,0),(1,1),(0,1)};
int[] edge_flag={0,0,0,1};
draw(chemin);
gouraudshade(chemin,p,points,edge_flag);
dot(chemin);
draw(points[0]--points[1]--points[2]--points[3]--cycle,dashed);
Asymptote - Figure 0019: fig_ga04_210608_gouraud.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_ga04_210608_gouraud
size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(0,1)..cycle;

pen[] p={red,green,blue,magenta};
pair[] points={(0,0),(1,0),(1,1),(0,1)};
int[] edge_flag={0,0,0,2};
draw(chemin);
gouraudshade(chemin,p,points,edge_flag);
dot(chemin);
draw(points[0]--points[1]--points[2]--points[3]--cycle,dashed);
Asymptote - Figure 0020: fig_ga05_210608_gouraud.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_ga05_210608_gouraud
size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(0,1)..cycle;

pen[] p={red,green,blue,magenta};
pair[] points={(0,0),(1.1,0),(.5,1.1),(0,1.1)};
int[] edge_flag={0,0,0,1};
draw(chemin);
gouraudshade(chemin,p,points,edge_flag);
dot(chemin);
draw(points[0]--points[1]--points[2]--points[3]--cycle,dashed);
Asymptote - Figure 0021: fig_sh01_030410_axialshade.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_sh01_030410_axialshade
import geometry;

size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(1.5,1)..(0,1)..cycle;

pen   stylo1=red, stylo2=blue;
point p1=(0,0),   p2=(1,1);
segment seg=segment(p1,p2);
line d2=perpendicular(p1,seg), d3=perpendicular(p2,seg);

axialshade(chemin,stylo1,p1,stylo2,p2);

draw(chemin);
dot(chemin);

draw(d2^^d3,1bp+dashed);
distance("D\'egrad\'e axial",p1,p2,dashed,Arrows);

Asymptote - Figure 0022: fig_sh11_030410_radialshade.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_sh11_030410_radialshade
import geometry;

size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(1.5,1)..(0,1)..cycle;

pen   stylo1=red, stylo2=blue;
point p1=(0.5,0.5), p2=(0.5,0.8);
real  r1=.5,        r2=0.85;
circle c1=circle(p1,r1), c2=circle(p2,r2);

radialshade(chemin,stylo1,p1,r1,stylo2,p2,r2);

draw(chemin);
dot(chemin);

draw(c1^^c2,1bp+dashed);
dot(p1^^p2,4bp+green);

Asymptote - Figure 0023: fig_sh12_030410_radialshade.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_sh12_030410_radialshade
// Bizarre, bizarre... vous avez dit bizarre ?
import geometry;

size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(1.5,1)..(0,1)..cycle;

pen   stylo1=red, stylo2=blue;
point p1=(0.5,0.5), p2=(0.5,0.8);
real  r1=.5,        r2=0.6;
circle c1=circle(p1,r1), c2=circle(p2,r2);

radialshade(chemin,stylo1,p1,r1,stylo2,p2,r2);

draw(chemin);
dot(chemin);

draw(c1^^c2,1bp+dashed);
dot(p1^^p2,4bp+green);

Asymptote - Figure 0024: fig_sh13_030410_radialshade.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_sh13_030410_radialshade
// Bizarre, bizarre... vous avez dit bizarre ?
size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(1.5,1)..(0,1)..cycle;

pen   stylo1=red, stylo2=blue;
//point p1=(0.5,0.5), p2=(0.5,0.8);
pair p1=(0.5,0.5), p2=(0.5,0.8);
real  r1=.5,        r2=0.6;
path c1=circle(p1,r1), c2=circle(p2,r2);

radialshade(chemin,stylo1,p1,r1,stylo2,p2,r2);

draw(chemin);
dot(chemin);

draw(c1^^c2,1bp+dashed);
dot(p1^^p2,4bp+green);
Asymptote - Figure 0025: fig_sh14_030410_radialshade.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_sh14_030410_radialshade
// Bizarre, bizarre... vous avez dit bizarre ?
size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(1.5,1)..(0,1)..cycle;

pen   stylo1=red, stylo2=blue;
pair p1=(0.5,0.5), p2=(0.5,0.8);
real  r1=.5,        r2=0.6;
path c1=circle(p1,r1), c2=circle(p2,r2);

radialshade(chemin,stylo2,p2,r2,stylo1,p1,r1);

draw(chemin);
dot(chemin);

draw(c1^^c2,1bp+dashed);
dot(p1^^p2,4bp+green);

Asymptote - Figure 0026: fig_sh15_030410_radialshade.asy
(Code compilé avec Asymptote version 1.95svn)
largeur320 Figure fig_sh15_030410_radialshade
// Bizarre, bizarre... vous avez dit bizarre ?
import geometry;
size(7cm,0);

path chemin=(0,0){dir(45)}..(1,0)..(1,.5)..(1.5,1)..(0,1)..cycle;

pen   stylo1=red, stylo2=blue;
point p1=(0.5,0.5), p2=(0.5,0.8);
real  r1=.5,        r2=0.6;
circle c1=circle(p1,r1), c2=circle(p2,r2);

radialshade(chemin,stylo2,p2,r2,stylo1,p1,r1);

draw(chemin);
dot(chemin);

draw(c1^^c2,1bp+dashed);
dot(p1^^p2,4bp+green);

Dernière modification le Fri Oct 28 13:00:18 CEST 2011 par G.Marris       Valide XHTML