Page 1 sur 1

Illustration suite arithmétique

Posté : lun. 25 mai 2015, 22:57
par Nico56
Bonsoir, j'ai récupéré un code sur la galerie, j'aimerai l'adapter mais je n'y arrive pas.
Beaucoup de lignes restent mystérieuse et j'ai beau chercher, je ne comprends pas...
Mon but est d'illustrer les 4 premiers termes de la suite puis u_{n-1} et u_n en faisant apparaître des pointillés entre u_3 et u_n et en faisant une grande flèche entre u_0 et u_n comme j'ai pu le faire.
J'aimerai aussi pouvoir avoir une flèche polygonale (vers le haut, puis vers la droite, puis vers le bas).
Merci d'avance pour votre aide!
Nico

Figure asymptote 236604d2741395ddc3c4a05c15325cbe
*** 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. unitsize(0.5cm);
  3. real u0=0, r=3;
  4. int n=8;
  5. object objtemp, ui[];
  6. pair z[];
  7. for(int k=0; k<=n; ++k){
  8. z.push(u0+k*r); // je ne comprends pas cette ligne...
  9. objtemp = draw(Label(format("$u_%i$",k),align=N),ellipse,z[k],nullpen); // Comment est créé z[k]?
  10. ui.push(objtemp); // je ne comprends pas cette ligne...
  11. }
  12.  
  13. // Du "deferred drawing" pour le tracé des flèches entre les "objects".
  14. add(new void(picture pic, transform t) {
  15. draw(pic,Label("$+n\times r$",align=LeftSide),
  16. point(ui[0],SSE,t){SE}..{NE}point(ui[n],SSW,t),
  17. Arrow);
  18. draw(pic,Label("$+r$",align=LeftSide),
  19. point(ui[n-1],NE,t){N}..{S}point(ui[n],N,t),
  20. Arrow);
  21. for(int k=0; k<n/2; ++k)
  22. draw(pic,Label("$+r$",align=LeftSide),
  23. point(ui[k],NE,t){N}..{S}point(ui[k+1],N,t),
  24. Arrow);
  25. });
  26. xaxis(Ticks("%",Step=3,step=0,Size=1mm));

Re: Illustration suite arithmétique

Posté : mar. 26 mai 2015, 18:13
par GM

Figure asymptote 490d62b0babccbadff7a9ac5d19877a5
*** 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. unitsize(0.5cm);
  3.  
  4. real u(int n){return 3*n;}
  5.  
  6. object objtemp, up[], ud[];
  7. real termes[];
  8.  
  9. int listeIND[][] = {{0,1,2,3,4},{5,6},{7,8,9}};
  10. string listeLAB[] = {"n-1","n","n+1"};
  11.  
  12. for(int k=0; k<listeIND[0].length; ++k){
  13. int rang=listeIND[0][k];
  14. termes.push(u(rang));
  15. objtemp = draw(Label(format("$u_{%i}$",rang),align=N),ellipse,(u(rang),0),nullpen);
  16. up.push(objtemp);
  17. }
  18.  
  19. for(int k=0; k<listeIND[2].length; ++k){
  20. int rang=listeIND[2][k];
  21. termes.push(u(rang));
  22. objtemp = draw(Label("$u_{"+listeLAB[k]+"}$",align=N),ellipse,(u(rang),0),nullpen);
  23. ud.push(objtemp);
  24. }
  25.  
  26. // Du "deferred drawing" pour le tracé des flèches entre les "objects".
  27. add(new void(picture pic, transform t) {
  28. for(int k=0; k<up.length-1; ++k)
  29. draw(pic,Label("$+r$",align=LeftSide),
  30. point(up[k],NNE,t){N}..{S}point(up[k+1],N,t),
  31. Arrow);
  32. for(int k=0; k<ud.length-1; ++k)
  33. draw(pic,Label("$+r$",align=LeftSide),
  34. point(ud[k],NNE,t){N}..{S}point(ud[k+1],N,t),
  35. Arrow);
  36.  
  37. draw(pic,Label("$+n\times r$",align=LeftSide),
  38. point(up[0],SSE,t){SE}..{NE}point(ud[ud.length-2],SSW,t),
  39. Arrow);
  40. });
  41. xaxis(Ticks("%",termes,Size=1mm));


Version provisoire... mais j'ai trop de boulot pour terminer l'exemple maintenant.

A noter les lignes :

Code : Tout sélectionner

real u(int n){return 3*n;}
Je définis une fonction pour le terme général de la suite (plutôt que u0 et r)... pour qu'il y ait peu de modifications à apporter, si on décide de représenter les termes d'une suite non arithmétique.

Code : Tout sélectionner

int    listeIND[][] = {{0,1,2,3,4},{5,6},{7,8,9}};
string listeLAB[]   =                    {"n-1","n","n+1"};
listeIND[0] est la liste des indices des premiers termes.
listeIND[1] ne sert à rien pour l'instant mais pour pourrait servir à préciser où créer une rupture dans l'axe des abscisses.
listeIND[2] est la liste des indices des derniers termes... qui sont remplacés à l'affichage par les valeurs de listeLAB.

Re: Illustration suite arithmétique

Posté : mar. 26 mai 2015, 18:57
par GM
Suggestion : comme je n'ai pas eu le temps de répondre aux questions du premier script... et comme il pourrait y en avoir d'autres supplémentaires sur le second, je rappelle une astuce :

Quand on ne comprend pas ce que fait une ligne comme celle ci :

Code : Tout sélectionner

z.push(u0+k*r);
on demande d'afficher en console, le contenu de la variable concernée :

Code : Tout sélectionner

write("avant : z=",z);
z.push(u0+k*r);
write("après : z=",z);
ou alors, on fait une recherche sur push dans la doc Asymptote :
Image

Re: Illustration suite arithmétique

Posté : mar. 26 mai 2015, 19:04
par Nico56
Merci pour ces réponses! Je vais éplucher ça ce soir.