envelope & deferred drawing

Exemples inclassables dans les sous-forums précédents...
... et des trucs et astuces à connaitre.
Règles du forum
ATTENTION ! Il est demandé de ne déposer dans ce forum que des exemples en langage Asymptote
  • finalisés
  • que l'on pense intéressants et optimisés
  • et qui se rapportent au thème du forum.
Si certains exemples déposés donnent lieu à de nombreuses modifications, ils seront déplacés et remplacés par un nouveau sujet dans ce forum avec la ou les meilleures propositions.
Pour les demandes d'aide ... il y a un forum spécifique !
Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

envelope & deferred drawing

Message non lu par GM » lun. 20 août 2012, 08:56

Un exemple déposé sur mathematex, il y a 18 mois, qui répondait à une demande.

Je mets une copie de l'exemple ici car :
  • je viens de réaliser que certaines images que je mettais, à l'époque, en ligne avec imageshack.us, ne sont plus disponibles et donc j'imagine que toutes les images dans ce cas vont avoir le même sort ;
  • je le trouvais intéressant à faire... même si il faudrait le revoir pour l'optimiser.

Figure asymptote d99543489fd6f490782d25f42b6f7721
*** 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. real u=3;
  2. unitsize(u*cm);
  3. texpreamble("\newcommand{\dfrac}[2]{\displaystyle\frac{#1}{#2}}");
  4. string[] s={"$\dfrac{4}{5}$",
  5. "$=$",
  6. "$\dfrac{\ldots\vphantom{1}}{15}$",
  7. "$=$",
  8. "$\dfrac{20}{\ldots}$",
  9. "$=$",
  10. "$\dfrac{\ldots\vphantom{1}}{20}$"
  11. };
  12. envelope[] env={box,box, box, box, box,box, roundbox};
  13. pen[] couleur={red,nullpen,blue,nullpen,red,nullpen,blue};
  14.  
  15. object[] obj=new object[s.length];
  16. real dx=0;
  17. for(int k=0; k<s.length; ++k){
  18. obj[k] = object(Label(scale(u)*s[k],(dx,0),Align,basealign),env[k],couleur[k]);
  19. dx+=((max(obj[k])-min(obj[k])).x/(u*cm));
  20. }
  21.  
  22. frame o=pack(align=realEpsilon*E,obj[0],obj[1],obj[2],obj[3],obj[4],obj[5],obj[6]);
  23. add(o);
  24.  
  25. draw((0,0)--(truepoint(E).x,0),dotted+red);
  26.  
  27. add(new void(picture pic, transform t) {
  28. transform it=inverse(t);
  29.  
  30. // Flèche noire
  31. draw(pic,point(obj[0],N,t){N}..tension 3 ..{S}point(obj[6],N,t),ArcArrows);
  32.  
  33. // Flèche verte
  34. path flecheverte = point(obj[0],S,t){S}.. {N}point(obj[2],S,t);
  35. pair posplus= point(flecheverte,.7);
  36. Label labplus=scale(.5)*"+",
  37. labelvert=Label(labplus,posplus);
  38. object lab = object(labelvert,box,nullpen);
  39.  
  40. draw(pic,flecheverte,.8green,ArcArrows);
  41.  
  42. // Flèche bleue
  43. draw(pic,(it*point(lab,S,t){SE}..tension 2 ..{N}point(obj[6],S,t)),blue,ArcArrow);
  44.  
  45. // Ajout du +
  46. label(pic,scale(u)*labplus,posplus,Fill(white));
  47. });
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Répondre