question du forum asy

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 !
OG
V.I.P.
V.I.P.
Messages : 142
Enregistré le : dim. 7 mars 2010, 22:27

question du forum asy

Message non lu par OG » dim. 15 avr. 2012, 15:22

Bonjour Gaëtan

Comme ce sera plus facile de s'exprimer et éventuellement de se comprendre en français
sur ton message concernant l'accolade, pourrais-tu me dire ce qui ne va pas et surtout
ce que tu veux faire ? Truepoint et point m'échappent encore plus que toi, je ne sais pas
si je pourrais aider.

O.G.

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

Re: question du forum asy

Message non lu par GM » dim. 15 avr. 2012, 15:57

Salut Olivier,

Le fonctionnement attendu est, si j'ai bien compris, celui-ci :

Figure asymptote 23750bb582f41d3fdafc4f8b40c0b0b5
*** 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(300);
  2. draw(scale(4)*"Test",(10,1)--(0,0));
  3. dot("nw",point(NW),SE,red);
  4. dot("se",point(SE),NW,red);
  5. dot("NW",truepoint(NW),SE,blue);
  6. dot("SE",truepoint(SE),NW,blue);


truepoint(NW), contrairement à point(NW), tient compte du label.

Si j'ai bien compris Asymptote, à chaque fois que l'on ajoute un élément dans une figure... il y a deux calculs de la taille de l'image : un qui ne tient pas compte des labels, l'autre qui en tient compte... de sorte que ce que renvoient les commandes point(...) et truepoint(...) prennent en compte l'ajout. Pour ce faire, il y a une série de fonctions (addPath, addBox, ...).
Dans ma fonction cotationaccolade, je n'ai pas su les utiliser correctement pour que truepoint(NW)et point(NW) renvoient les bons points après l'ajout d'une accolade avec label.
Et il m'a semblé qu'il y avait plusieurs façons de faire... donc j'aimerais que JCBowman viennent donner un conseil sur quelque chose qui n'est pas du tout documenté et qu'il faut supputer en regardant les fichiers d'origine.
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 !

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

Re: question du forum asy

Message non lu par GM » dim. 15 avr. 2012, 16:39

GM a écrit :Dans ma fonction cotationaccolade,


... dont voici le premier jet que j'ai donné sur le forum officiel (j'en ai une version plus évoluée depuis) :

Figure asymptote f8536bfb73a6ee2dcb784dc4932e8d09
*** 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. ///////////////////////////////////////////////////////////
  2. void cotationaccolade(picture pic=currentpicture,
  3. pair pA, pair pB,
  4. Label L = "", bool Lrot=false,
  5. pen p=currentpen)
  6. {
  7. path brace=(0,0).. controls (3,4) and (5,4) ..(10,4)
  8. --(40,4).. controls (45,4) and (48,4) ..(50,6);
  9. brace=brace--reverse(reflect((50,0),(50,10))*brace);
  10. brace=shift(pA)*rotate(degrees(pB-pA))*scale(abs(pB-pA)/100)*brace;
  11. pic.add(new void(frame f, transform t)
  12. {
  13. transform T = Lrot ? rotate(degrees(pB - pA)) : identity();
  14. draw(f,t*brace,p);
  15. if(L.s != "") {
  16. frame fr;
  17. add(fr,T*L);
  18. pair pos=point(t*brace,L.relative()*length(brace));
  19. add(f,fr,pos,align=N);
  20. }
  21. },true);
  22. pic.addPath(brace,p);
  23. }
  24. ///////////////////////////////////////////////////////////
  25. ///////////////////////////////////////////////////////////
  26.  
  27. size(300);
  28. pair z1=(0,0), z2=(10,1);
  29. dot(z1^^z2);
  30. cotationaccolade(z1,z2,L=Label(scale(4)*"Test",Relative(.5),purple));
  31. dot("nw",point(NW),SE,red);
  32. dot("se",point(SE),NW,red);
  33. dot("NW",truepoint(NW),SE,blue);
  34. dot("SE",truepoint(SE),NW,blue);


GM a écrit :je n'ai pas su les utiliser correctement pour que truepoint(NW)et point(NW) renvoient les bons points après l'ajout d'une accolade avec label.
Et il m'a semblé qu'il y avait plusieurs façons de faire... donc j'aimerais que JCBowman viennent donner un conseil sur quelque chose qui n'est pas du tout documenté et qu'il faut supputer en regardant les fichiers d'origine.


J'ai essayé d'utiliser addPath et addBox... puis j'ai regardé les différentes utilisations dans les fichiers asy d'asymptote... pour m'apercevoir qu'il y a beaucoup de variantes d'utilisation et donc j'ai arrêté de chercher pour que JCBowman me confirme d'abord que j'ai compris ce qu'il fallait faire et la fonction qu'il est préférable d'utiliser. J'ai ma petite idée... mais je préfèrerais qu'elle me soit confirmée afin de ne pas chercher dans la mauvaise direction.
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 !

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

Re: question du forum asy

Message non lu par GM » dim. 15 avr. 2012, 16:46

OG a écrit :Comme ce sera plus facile de s'exprimer et éventuellement de se comprendre en français...

Suis-je plus clair en Français ? :mrgreen:
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 !

OG
V.I.P.
V.I.P.
Messages : 142
Enregistré le : dim. 7 mars 2010, 22:27

Re: question du forum asy

Message non lu par OG » dim. 15 avr. 2012, 16:52

Hy

oui c'est très clair maintenant. Il faut trouver par contre :)

O.G.

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

Re: question du forum asy

Message non lu par GM » dim. 15 avr. 2012, 17:13

OG a écrit :Il faut trouver par contre :)

Oui mais... je n'ai pas douté qu'en tâtonnant, je trouverais comment utiliser addBox(pair userMin, pair userMax, pair trueMin, pair trueMax) pour mon exemple, mais c'est ce que j'ai vu dans les fichiers asy, avec des façons de faire différentes, qui m'a convaincu qu'il y avait probablement des subtilités qui m'échappent. Donc j'ai tenté ma chance, pour voir si JCBowman répondrait pour m'éviter de faire un choix qui ne soit pas adapté à toutes les situations.
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 !

OG
V.I.P.
V.I.P.
Messages : 142
Enregistré le : dim. 7 mars 2010, 22:27

Re: question du forum asy

Message non lu par OG » dim. 15 avr. 2012, 21:07

Re

Pourquoi vouloir faire avec le deferred vu que tu connais la transformation qui donne
le chemin de l'accolade entre tes deux points ?
Peut-être pour des choses plus sophistiquées ?

Figure asymptote 27c3993af64ebbb846382ba4f68ef82b
*** 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. void cotationaccolade(picture pic=currentpicture,
  2. pair pA, pair pB,
  3. Label L = "", bool Lrot=false,
  4. pen p=currentpen)
  5. {
  6. path brace=(0,0).. controls (3,4) and (5,4) ..(10,4)
  7. --(40,4).. controls (45,4) and (48,4) ..(50,6);
  8. brace=brace--reverse(reflect((50,0),(50,10))*brace);
  9. brace=rotate(degrees(pB-pA))*scale(abs(pB-pA)/100)*brace;
  10. draw(L,brace,p,align=N);
  11. ;
  12. }
  13. ///////////////////////////////////////////////////////////
  14. ///////////////////////////////////////////////////////////
  15.  
  16. size(10cm);
  17. pair z1=(0,0), z2=(5,-.25);
  18. dot(z1^^z2);
  19. cotationaccolade(z1,z2,L=Label("Text",Relative(.5),purple),.2bp+green);
  20. dot("sw",point(SE),NW,red);
  21. dot("ne",point(NW),SE,red);
  22. dot("SW",truepoint(SE),NW,blue);
  23. dot("NE",truepoint(NW),SE,blue);


O.G.

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

Re: question du forum asy

Message non lu par GM » dim. 15 avr. 2012, 21:34

OG a écrit :Peut-être pour des choses plus sophistiquées ?


On doit pouvoir mettre une accolade dans une picture, ajouter la picture à currentpicture... et avoir point(SE) correct... ce qui ne me semble pas être le cas pour l'exemple suivant.

Figure asymptote 689cadf9134327c9ccb53aef81163ea2
*** 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. void cotationaccolade(picture pic=currentpicture,
  2. pair pA, pair pB,
  3. Label L = "", bool Lrot=false,
  4. pen p=currentpen)
  5. {
  6. path brace=(0,0).. controls (3,4) and (5,4) ..(10,4)
  7. --(40,4).. controls (45,4) and (48,4) ..(50,6);
  8. brace=brace--reverse(reflect((50,0),(50,10))*brace);
  9. brace=shift(pA)*rotate(degrees(pB-pA))*scale(abs(pB-pA)/100)*brace;
  10. draw(pic,L,brace,p,align=LeftSide);
  11. }
  12. unitsize(2cm);
  13.  
  14. draw((0,0)--(5,2));
  15.  
  16. picture pic;
  17. pair z1=(0,0), z2=(5,-.25);
  18. dot(pic,z1^^z2);
  19. cotationaccolade(pic,z1,z2,L=Label("Text",Relative(.5),purple),.2bp+green);
  20. add(pic.fit(10cm),(1,-1));
  21.  
  22. dot("se",point(SE),NW,red);
  23. dot("nw",point(NW),SE,red);
  24. dot("SE",truepoint(SE),NW,blue);
  25. dot("NW",truepoint(NW),SE,blue);
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 !

OG
V.I.P.
V.I.P.
Messages : 142
Enregistré le : dim. 7 mars 2010, 22:27

Re: question du forum asy

Message non lu par OG » dim. 15 avr. 2012, 21:49

SE semble correct ici. Si tu remplaces accolade par un simple draw le résultat est le même.
?
O.G.

Figure asymptote d0c5eba340998e42ec83080bcc333046
*** 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. unitsize(2cm);
  2.  
  3. draw((0,0)--(5,2));
  4.  
  5. picture pic;
  6. pair z1=(0,0), z2=(5,-.25);
  7. dot(pic,z1^^z2);
  8. //cotationaccolade(pic,z1,z2,L=Label("Text",Relative(.5),purple),.2bp+green);
  9. draw(pic,z1--z2,L=Label("Text",Relative(.5),purple),N);
  10. add(pic.fit(10cm),(1,-1));
  11.  
  12. dot("se",point(SE),NW,red);
  13. dot("nw",point(NW),SE,red);
  14. dot("SE",truepoint(SE),NW,blue);
  15. dot("NW",truepoint(NW),SE,blue);

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

Re: question du forum asy

Message non lu par GM » dim. 15 avr. 2012, 21:54

OG a écrit :Si tu remplaces accolade par un simple draw le résultat est le même.

Bien vu.
Bizarre...

Une source d'inspiration : distance(...) de geometry.asy.

Apparemment Philippe (dont le code a été,j'imagine, validé par JCBowman) y a vu un intérêt dans le deferred drawing :

Code : Tout sélectionner

void distance(picture pic = currentpicture, Label L = "", point A, point B,
              bool rotated = true, real offset = 3mm,
              pen p = currentpen, pen joinpen = invisible,
              arrowbar arrow = Arrows(NoFill))
{
  pair A = A, B = B;
  path g = A--B;
  transform Tp = shift(-offset * unit(B - A) * I);
  pic.add(new void(frame f, transform t) {
      picture opic;
      path G = Tp * t * g;
      transform id = identity();
      transform T = rotated ? rotate(B - A) : id;
      Label L = L.copy();
      L.align(L.align, Center);
      if(abs(ypart((conj(A - B) * L.align.dir))) < epsgeo && L.filltype == NoFill)
        L.filltype = UnFill(1);
      draw(opic, T * L, G, p, arrow, Bars, PenMargins);
      pair Ap = t * A, Bp = t * B;
      draw(opic, (Ap--Tp * Ap)^^(Bp--Tp * Bp), joinpen);
      add(f, opic.fit());
    }, true);
  pic.addBox(min(g), max(g), Tp * min(p), Tp * max(p));
}
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