hachures sous une courbe

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
DK
Messages : 57
Enregistré le : ven. 26 mars 2010, 17:23

hachures sous une courbe

Message non lu par DK » ven. 20 avr. 2012, 12:52

Bonjour,

Dans l'exemple ci-dessous, les hachures sous la courbe occupent un rectangle. J'aurai voulu limiter la zone hachurée sous la courbe sur un espace moins important et sans que cela ai l'aspect d'une zone rectangulaire. Comment puis-je faire? (sans forcément prendre une courbe parallèle sous la courbe comme limite inférieure des hachures).

Deuxième problème : je ne parviens pas à hachurer toute la zone sous les courbes Cg-Cf-Cg sur l'intervalle [-4;3]. (Nous savons bien que ca ne correspond pas à f(x)<=g(x) sur [-4;3], mais sinon par curiosité comment faire de telles hachures d'un seul coup?)

Merci pour vos suggestions.

Bien cordialement.
DK

Figure asymptote f6d41606859955e851fc0e793589ea18
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph_pi;
  2. import patterns;
  3.  
  4. usepackage("relsize");
  5. usepackage("mathrsfs");
  6.  
  7. // ----- Définition et tracé de la grille (+axes) -----------------
  8. real xmin=-4, xmax=2, ymin=-8 , ymax=6 ;
  9. graphicrules( xunit=.8cm, yunit=.8cm, xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax );
  10. grid(xStep=1, xstep=.5,
  11. yStep=1, ystep=.5,
  12. pTick=.7bp+black,
  13. ptick=linetype("0 " + string(1mm), offset=0, scale=false, adjust=false)+.7bp+.4white,
  14. above=false
  15. );
  16. cartesianaxis(
  17. p=currentpen,
  18. xticks=Ticks(Label(currentpen+fontsize(7),Fill(white)),
  19. Step=1, step=.5,
  20. NoZero,
  21. ptick=grey),
  22. yticks=Ticks(Label(currentpen+fontsize(7), align=0.75*NW,Fill(white)),
  23. Step=1, step=.5,
  24. NoZero,
  25. ptick=grey),
  26. viewxaxis=true,
  27. viewyaxis=true,
  28. arrow=Arrow
  29. );
  30. labeloij(p=1bp+.5*red,arrow=Arrow(SimpleHead,5bp),dot);
  31.  
  32. // ----- Définition des fonctions -----------------
  33. real f(real x) {return x^2+3*x+1 ;}
  34. real g(real x) {return -2*x^2-4*x+3 ;}
  35.  
  36. // ----- Tracé des courbes Cf, Cg -----------------
  37. draw(graph(f, -4,1.1, n=500),1bp+red);
  38. draw(graph(g, -3.5,3/2, n=500),1bp+blue);
  39.  
  40. real marge=.5;
  41. xlimits(xmin-marge,xmax+marge,Crop);
  42. ylimits(ymin-marge,ymax+marge,Crop);
  43.  
  44. // ----- Quelques textes et constructions sur la figure -----------------
  45. label("$\mathscr{C}_f$",(-3.5,f(-3.5)),NE);
  46. label("$\mathscr{C}_g$",(-3/2,g(-3/2)),NW);
  47. label("\relsize{-2}{BMA - option : \'Eb\'enisterie -- DM mars 2012}", (-1,-8.35),UnFill);
  48. // Points d'intersection entre les deux courbes sur l'intervalle [-4;3] :
  49. real[][] pts=intersections(graph(f),graph(g));
  50. pair I=point(graph(f),pts[0][0]),
  51. J=point(graph(f),pts[1][0]);
  52. dot("$I$",I,NW,3bp+black);
  53. dot("$J$",J,E,3bp+black);
  54. //
  55. // ----- Les hachures pour f(x) <= g(x) -----------------
  56. path zonehachure = buildcycle( (I.x,g(-3.5))--I, graph(f,I.x,J.x), J--(J.x,g(3/2))--(I.x,g(-3.5)) );
  57.  
  58. add("hachure",hatch(H=1mm,dir=SE,gray));
  59. fill(zonehachure,pattern("hachure"));

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1419
Enregistré le : dim. 7 mars 2010, 14:50

Re: hachures sous une courbe

Message non lu par GM » ven. 20 avr. 2012, 13:01

DK a écrit :Bonjour,

Bonjour,

DK a écrit :Dans l'exemple ci-dessous, les hachures sous la courbe occupent un rectangle. J'aurai voulu limiter la zone hachurée sous la courbe sur un espace moins important et sans que cela ai l'aspect d'une zone rectangulaire. Comment puis-je faire? (sans forcément prendre une courbe parallèle sous la courbe comme limite inférieure des hachures).

Si tu ne veux pas délimiter le bas avec un trait horizontal ou une courbe parallèle... je ne vois pas quelle forme tu espères.

DK a écrit :Deuxième problème : je ne parviens pas à hachurer toute la zone sous les courbes Cg-Cf-Cg sur l'intervalle [-4;3].

Que veux-dire Cg-Cf-Cg ?
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.59)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.52-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.52-1 git) + TexLive2018
Merci de préciser la votre !

DK
Messages : 57
Enregistré le : ven. 26 mars 2010, 17:23

Re: hachures sous une courbe

Message non lu par DK » ven. 20 avr. 2012, 16:46

Bonjour,

J'ai utilisé l'écriture Cg-Cf-Cg pour dire comment pourrait-on hachurer sous la courbe bleu jusqu'au point I (donc de x=-3.5 à x=xI, intersections des courbes Cg et Cf), sous la courbe rouge entre les points I et J, et sous la courbe bleue de J jusqu'à son tracé que j'ai arrêté à x=3/2? (donc Cg=courbe représentative de la fonction g, Cf= courbe représentative de la fonction f et qui est tracée en rouge).

Si tu ne veux pas délimiter le bas avec un trait horizontal ou une courbe parallèle... je ne vois pas quelle forme tu espères.

Et bien n'importe quelle forme, une bézier par exemple. Donc là je vais regarder comment dessiner une bézier, sous la courbe rouge entre les abscisses de I et J, puis ensuite tenter de hachurer le domaine compris en-dessous de la courbe rouge entre les points I et J, et les abscisses x=xI et x= xJ et une courbe de bézier.

Bien cordialement.
DK

Avatar du membre
chellier
Messages : 101
Enregistré le : jeu. 18 mars 2010, 17:30

Re: hachures sous une courbe

Message non lu par chellier » ven. 20 avr. 2012, 17:34

Bonjour,

Je ne sais pas si ça répond en parti à ta question :

Code : Tout sélectionner

// ----- Les hachures pour f(x) <= g(x) -----------------
//path zonehachure = buildcycle( (I.x,g(-3.5))--I, graph(f,I.x,J.x), J--(J.x,g(3/2))--(I.x,g(-3.5)) );
path p1=graph(g, -3.5,I.x, n=500), p2=graph(f,I.x,J.x,n=500), p3=graph(g,J.x,1.5, n=500);
path zonehachure = p1--p2--p3--cycle;
add("hachure",hatch(H=1mm,dir=SE,gray));
fill(zonehachure,pattern("hachure"));


Figure asymptote 7819271e201252d0daab322bb4192612
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph_pi;
  2. import patterns;
  3.  
  4. usepackage("relsize");
  5. usepackage("mathrsfs");
  6.  
  7. // ----- Définition et tracé de la grille (+axes) -----------------
  8. real xmin=-4, xmax=2, ymin=-8 , ymax=6 ;
  9. graphicrules( xunit=.8cm, yunit=.8cm, xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax );
  10. grid(xStep=1, xstep=.5,
  11. yStep=1, ystep=.5,
  12. pTick=.7bp+black,
  13. ptick=linetype("0 " + string(1mm), offset=0, scale=false, adjust=false)+.7bp+.4white,
  14. above=false
  15. );
  16. cartesianaxis(
  17. p=currentpen,
  18. xticks=Ticks(Label(currentpen+fontsize(7),Fill(white)),
  19. Step=1, step=.5,
  20. NoZero,
  21. ptick=grey),
  22. yticks=Ticks(Label(currentpen+fontsize(7), align=0.75*NW,Fill(white)),
  23. Step=1, step=.5,
  24. NoZero,
  25. ptick=grey),
  26. viewxaxis=true,
  27. viewyaxis=true,
  28. arrow=Arrow
  29. );
  30. labeloij(p=1bp+.5*red,arrow=Arrow(SimpleHead,5bp),dot);
  31.  
  32. // ----- Définition des fonctions -----------------
  33. real f(real x) {return x^2+3*x+1 ;}
  34. real g(real x) {return -2*x^2-4*x+3 ;}
  35.  
  36. // ----- Tracé des courbes Cf, Cg -----------------
  37. draw(graph(f, -4,1.1, n=500),1bp+red);
  38. draw(graph(g, -3.5,3/2, n=500),1bp+blue);
  39.  
  40. real marge=.5;
  41. xlimits(xmin-marge,xmax+marge,Crop);
  42. ylimits(ymin-marge,ymax+marge,Crop);
  43.  
  44. // ----- Quelques textes et constructions sur la figure -----------------
  45. label("$\mathscr{C}_f$",(-3.5,f(-3.5)),NE);
  46. label("$\mathscr{C}_g$",(-3/2,g(-3/2)),NW);
  47. label("\relsize{-2}{BMA - option : \'Eb\'enisterie -- DM mars 2012}", (-1,-8.35),UnFill);
  48. // Points d'intersection entre les deux courbes sur l'intervalle [-4;3] :
  49. real[][] pts=intersections(graph(f),graph(g));
  50. pair I=point(graph(f),pts[0][0]),
  51. J=point(graph(f),pts[1][0]);
  52. dot("$I$",I,NW,3bp+black);
  53. dot("$J$",J,E,3bp+black);
  54. //
  55. // ----- Les hachures pour f(x) <= g(x) -----------------
  56. //path zonehachure = buildcycle( (I.x,g(-3.5))--I, graph(f,I.x,J.x), J--(J.x,g(3/2))--(I.x,g(-3.5)) );
  57. path p1=graph(g, -3.5,I.x, n=500), p2=graph(f,I.x,J.x,n=500), p3=graph(g,J.x,1.5, n=500);
  58. path zonehachure = p1--p2--p3--cycle;
  59. add("hachure",hatch(H=1mm,dir=SE,gray));
  60. fill(zonehachure,pattern("hachure"));


Christophe
Modifié en dernier par GM le dim. 22 avr. 2012, 18:31, modifié 2 fois.
Raison : Ajout de l'image proposée par Christophe.

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1419
Enregistré le : dim. 7 mars 2010, 14:50

Re: hachures sous une courbe

Message non lu par GM » ven. 20 avr. 2012, 18:18

Peut-être comme cela : j'ai supprimé les points d'intersection dont je ne me suis pas servi.

Figure asymptote 8b2c164dbd00bdac9c084bb55071de17
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph_pi;
  2. import patterns;
  3. usepackage("relsize");
  4. usepackage("mathrsfs");
  5.  
  6. // ----- Définition et tracé de la grille (+axes) -----------------
  7. real xmin=-4, xmax=2, ymin=-8 , ymax=6 ;
  8. graphicrules( xunit=.8cm, yunit=.8cm, xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax );
  9. grid(xStep=1, xstep=.5,
  10. yStep=1, ystep=.5,
  11. pTick=.7bp+black,
  12. ptick=linetype("0 " + string(1mm), offset=0, scale=false, adjust=false)+.7bp+.4white,
  13. above=false
  14. );
  15. cartesianaxis(
  16. p=currentpen,
  17. xticks=Ticks(Label(currentpen+fontsize(7),Fill(white)),
  18. Step=1, step=.5,
  19. NoZero,
  20. ptick=grey),
  21. yticks=Ticks(Label(currentpen+fontsize(7), align=0.75*NW,Fill(white)),
  22. Step=1, step=.5,
  23. NoZero,
  24. ptick=grey),
  25. viewxaxis=true,
  26. viewyaxis=true,
  27. arrow=Arrow
  28. );
  29. labeloij(p=1bp+.5*red,arrow=Arrow(SimpleHead,5bp),dot);
  30.  
  31. // ----- Définition des fonctions et des courbes ------
  32. real f(real x) {return x^2+3*x+1 ;}
  33. real g(real x) {return -2*x^2-4*x+3 ;}
  34. path Cf = graph(f, -4,1.1, n=500),
  35. Cg = graph(g, -3.5,3/2, n=500);
  36.  
  37. real marge=.5;
  38. xlimits(xmin-marge,xmax+marge,Crop);
  39. ylimits(ymin-marge,ymax+marge,Crop);
  40.  
  41. // ----- Quelques textes et constructions sur la figure -----------------
  42. label("$\mathscr{C}_f$",(-3.5,f(-3.5)),NE);
  43. label("$\mathscr{C}_g$",(-3/2,g(-3/2)),NW);
  44. label("\relsize{-2}{BMA - option : \'Eb\'enisterie -- DM mars 2012}", (-1,-8.35),UnFill);
  45.  
  46. // --------- HACHURES et ftontière de la zone hachurée
  47. path zonehachure = firstcut(Cg,Cf).before
  48. --lastcut(firstcut(Cf,Cg).after,Cg).before
  49. --lastcut(Cg,Cf).after;
  50. draw(zonehachure,3bp+yellow);
  51.  
  52. // ----- Tracé des courbes Cf, Cg -----------------
  53. draw(Cf,1bp+red);
  54. draw(Cg,1bp+blue);
  55.  
  56. add("hachure",hatch(H=1mm,dir=SE,gray));
  57. fill(zonehachure--cycle,pattern("hachure"));
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.59)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.52-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.52-1 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1419
Enregistré le : dim. 7 mars 2010, 14:50

Re: hachures sous une courbe

Message non lu par GM » ven. 20 avr. 2012, 18:39

Pour quelque chose d'un peu plus original en bas :

Figure asymptote fab2818b5b7952065afcdd5097f5820c
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import patterns;
  2. import graph;
  3. real f(real x) {return x^2+3*x+1 ;}
  4. real g(real x) {return -2*x^2-4*x+3 ;}
  5. path Cf = graph(f, -4,1.1, n=500),
  6. Cg = graph(g, -3.5,3/2, n=500);
  7. path zonehachure = firstcut(Cg,Cf).before --lastcut(firstcut(Cf,Cg).after,Cg).before --lastcut(Cg,Cf).after;
  8. zonehachure = subpath(zonehachure,20,480);
  9. size(200,200,IgnoreAspect);
  10. draw(zonehachure,3bp+yellow);
  11. draw(Cf,1bp+red);
  12. draw(Cg,1bp+blue);
  13. add("hachure",hatch(H=1mm,dir=SE,gray));
  14. fill(zonehachure{dir(120)}..cycle,pattern("hachure"));
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.59)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.52-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.52-1 git) + TexLive2018
Merci de préciser la votre !

DK
Messages : 57
Enregistré le : ven. 26 mars 2010, 17:23

Re: hachures sous une courbe

Message non lu par DK » ven. 20 avr. 2012, 21:47

Bonsoir,

Pour la dernière figure, c'est ce que je recherchais à faire. Bien, alors j'étais bien loin du code proposé et qui répond à mes questions. Impossible à deviner même dirais-je ! Quelques explications m'arrangeraient une peu, disons pour me permettre d'utiliser dans d'autres situations.

Merci à vous cependant.

Bien cordialement.
D. COLLIN

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1419
Enregistré le : dim. 7 mars 2010, 14:50

Re: hachures sous une courbe

Message non lu par GM » ven. 20 avr. 2012, 22:08

DK a écrit :Quelques explications m'arrangeraient un peu


Des exemples pour comprendre firstcut et lastcut :
http://www.marris.org/asymptote/Intersections/index.html#fig_fa01_240708_firstcut_lastcut

subpath(path, real, real) est, je pense, suffisamment parlant. On pouvait deviner l'ordre de grandeur des réels à mettre, compte tenu que tu avais demandé 500 points aussi bien pour Cf que pour Cg.

Figure asymptote 9f15105fd4a5092540ffea9c8e65a965
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. size(200);
  2. transform t=shift(0,-1);
  3. path p1=(0,0)..(3,-1)..(5,2)..(7,2)..(10,1),
  4. p2=t*p1,
  5. p3=t^2*p1;
  6. draw(p1,dot());
  7. draw(p2^^p3,linetype("4 4"),dot());
  8. draw(subpath(p2,1,2),1bp+red,dot(red));
  9. draw(subpath(p3,0.5,3.25),1bp+green,dot(green));


J'imagine que tu as compris que c'est le {dir(120)} qui a imposé une tangente et a eu donc pour incidence la déformation de la courbe du bas.

Figure asymptote 77c6fcd843d8d8aefb86b97603c5e066
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph;
  2. size(300);
  3. real f(real x) { return 4-x^2; }
  4. path p[]={ graph(f,-2,2),
  5. graph(f,-2,2)--cycle,
  6. graph(f,-2,2)..cycle,
  7. graph(f,-2,2){dir(120)}..cycle,
  8. subpath(graph(f,-2,2),0,100){dir(120)}..cycle,
  9. subpath(graph(f,-2,2),20,80){dir(120)}..cycle
  10. };
  11. for(int k=0; k<p.length; ++k) draw(shift(5k,0)*p[k]);


Si les explications ne sont pas suffisantes, il suffit de le dire.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.59)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.52-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.52-1 git) + TexLive2018
Merci de préciser la votre !

Répondre