Flèche du bord d'un path au bord d'un autre

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 !
mumblee
Messages : 47
Enregistré le : jeu. 11 mars 2010, 10:29
Localisation : Lille

Flèche du bord d'un path au bord d'un autre

Message non lu par mumblee » sam. 6 oct. 2012, 18:26

Bonjour,

Comme dit le titre, j'aimerais relier deux bords de deux path à l'aide d'une flèche, idéalement comportant un label dans un cercle. Un peu comme avec l'extension flowchart.

J'ai commencé un bout de figure ci-dessous (j'ai déjà pas mal galéré avec les frame et les picture et d'ailleurs je ne suis pas sûr d'avoir bien compris ce qu'il se passait). J'aimerais relier le parallélogramme au rectangle, le rectangle au carré, etc.

C'est un aide-mémoire classique pour les propriétés des quadrilatères particuliers à destination d'élèves de cinquième.

Je ne suis pas sûr d'avoir été super clair. S'il faut des éclaircissements, n'hésitez pas à demander !

Merci pour toute aide.

Code : Tout sélectionner

unitsize(72);

picture picQ,picP,picR,picL,picC;

path q=(0,0)--(3,0)--(2.5,1.5)--(0.5,1)--cycle;
path p=slant(0.5)*yscale(1.5)*xscale(2)*unitsquare;
path r=xscale(3)*yscale(1.5)*unitsquare;
path l=xscale(1.5)*shift(E/sqrt(2))*rotate(45)*unitsquare;
path c=unitsquare;

draw(picQ,q);
draw(picP,p);
draw(picR,r);
draw(picL,l);
draw(picC,c);

add(picQ.fit(xsize=72),(0,0));
add(picP.scale(72),S);
add(picR.scale(72),2S+W);
add(picL.scale(72),2S+E);
add(picC.scale(72/sqrt(2)),3S);
Fabrice Eudes
Debian Bullseye 11.4, Asymptote 2.79, texlive 2022, Emacs 27.1

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

Re: Flèche du bord d'un path au bord d'un autre

Message non lu par GM » sam. 6 oct. 2012, 19:00

Bonsoir,

mumblee a écrit :S'il faut des éclaircissements, n'hésitez pas à demander !


J'ai une question : tu tiens à garder quelque chose de ce que tu proposes... à part le fait que cela doit avoir au final le même rendu que ce que tu proposes ? :mrgreen:

C'est pour savoir si je dois m'adapter à ce que tu proposes... ou si je peux repartir d'une feuille blanche.

Par exemple... le 72 dont je ne vois pas trop la raison (un lien avec 72 dpi ?)... il faut le garder ?
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: Flèche du bord d'un path au bord d'un autre

Message non lu par GM » sam. 6 oct. 2012, 19:03

Autre question : il va falloir ajouter des écritures ? dans les formes ?
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: Flèche du bord d'un path au bord d'un autre

Message non lu par GM » sam. 6 oct. 2012, 19:32

Et j'ai encore une question : puisque tu cites flowchart, tu n'as pas songé à t'inspirer de sa méthode ?
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 !

mumblee
Messages : 47
Enregistré le : jeu. 11 mars 2010, 10:29
Localisation : Lille

Re: Flèche du bord d'un path au bord d'un autre

Message non lu par mumblee » dim. 7 oct. 2012, 10:14

Bonjour Gaëtan,

Je réponds à tes 3 messages :
  1. Non, je ne tiens pas absolument à coller aux frame/picture. Si tu as une meilleure solution, cela m'ira très bien. On peut tout effacer et recommencer, pas de souci.
  2. Écrire la nature du quadrilatère dans la forme n'est pas indispensable. En fait, je ne sais pas ce qui est préférable pour la mémorisation : formes seules, textes seuls ou la combinaison des deux. Peut-être cette dernière est-elle meilleure pour toucher les différents types de mémoire des élèves ?
  3. Pour flowchart, les formes de block proposés sont limités et ne cadrent pas exactement avec ce que je désire. Et je ne sais pas si je suis aguerri pour m'inspirer du code de l'extension. Bon, j'admets, j'aurai dû aller le regarder ! Bref, j'ai décidé d'essayer de le faire "à la main" d'abord.
Fabrice Eudes
Debian Bullseye 11.4, Asymptote 2.79, texlive 2022, Emacs 27.1

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

Re: Flèche du bord d'un path au bord d'un autre

Message non lu par GM » dim. 7 oct. 2012, 13:09

désolé mais depuis un smartphone, ce n'est pas moi qui vais pouvoir t'aider aujourd'hui.
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: Flèche du bord d'un path au bord d'un autre

Message non lu par GM » dim. 7 oct. 2012, 14:42

GM a écrit :désolé mais depuis un smartphone, ce n'est pas moi qui vais pouvoir t'aider aujourd'hui.

Rectification... j'ai pu accéder à un pc momentanément :


C'est sûrement plein de défauts (mais je n'ai pas le temps d'y réfléchir longtemps aujourd'hui) ; c'est déjà un miracle si j'ai pu sortir cela en si peu de temps :

Figure asymptote e8c90e3b2b362da98d04471f44024110
*** 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(1cm);
  2. defaultpen(fontsize(8pt)+blue);
  3. struct forme{ path p;
  4. pair c;
  5. void operator init(path p, pair c=(0,0)){
  6. this.c=c;
  7. this.p=shift(-0.5*(min(p)+max(p)))*p;
  8. }
  9. void draw(picture pic=currentpicture,
  10. pen drawpen=currentpen+bp,
  11. pen fillpen=invisible,
  12. bool centreO=false){
  13. if(centreO){
  14. filldraw(pic, this.p, fillpen, drawpen);
  15. }else{
  16. filldraw(pic, shift(this.c)*this.p, fillpen, drawpen);
  17. }
  18. }
  19. }
  20.  
  21. pair point(forme F, pair dir, transform t=identity())
  22. {
  23. pair m=min(F.p);
  24. pair M=max(F.p);
  25. pair c=0.5*(m+M);
  26. pair z=t*F.c;
  27. real[] T=intersect(F.p,c--2*(m+realmult(rectify(dir),M-m))-c);
  28. if(T.length == 0) return z;
  29. return z+t*point(F.p,T[0]);
  30. }
  31.  
  32. forme q=forme((0,0)--(3,0)--(2.5,1.5)--(0.5,1)--cycle, (0, 1));
  33. forme p=forme(slant(0.5)*yscale(1.5)*xscale(2)*unitsquare, (0,-2));
  34. forme r=forme(xscale(3)*yscale(1.5)*unitsquare, (-4,-4));
  35. forme l=forme(scale(1.25)*xscale(1.5)*rotate(45)*unitsquare, (4,-4));
  36. forme c=forme(scale(2)*unitsquare, (0,-6));
  37.  
  38. q.draw();
  39. p.draw();
  40. r.draw(red);
  41. l.draw(2bp+.8green,yellow);
  42. c.draw();
  43.  
  44. add(new void(picture pic, transform t) {
  45. draw(pic,Label("$\fbox{... avec des cot\'es oppos\'es parall\`eles deux \`a deux}$",align=E),point(q,S,t){S}..{S}point(p,N,t),dashed,Arrow);
  46. draw(pic,Label("$\fbox{... avec un angle droit}$",align=NW),point(p,W,t){W}..{S}point(r,N,t),dashed,Arrow);
  47. draw(pic,Label("$\fbox{... avec 2 cot\'es cons\'ecutifs \'egaux}$",align=NE),point(p,E,t){E}..{S}point(l,N,t),dashed,Arrow);
  48. draw(pic,Label("$\fbox{... avec 2 cot\'es cons\'ecutifs \'egaux}$",align=SW),point(r,S,t){S}..{E}point(c,W,t),dashed,Arrow);
  49. draw(pic,Label("$\fbox{... avec un angle droit}$",align=SE),point(l,S,t){S}..{W}point(c,E,t),dashed,Arrow);
  50. });


La fonction point(forme F, pair dir, transform t=identity()) m'a été inspirée par une définition analogue dans plain_boxes.asy pour un object.
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 !

mumblee
Messages : 47
Enregistré le : jeu. 11 mars 2010, 10:29
Localisation : Lille

Re: Flèche du bord d'un path au bord d'un autre

Message non lu par mumblee » lun. 8 oct. 2012, 16:51

GM a écrit :Rectification... j'ai pu accéder à un pc momentanément :

Merci beaucoup Gaëtan, tu es trop dévoué, ce n'était pas urgentissime :)

GM a écrit :C'est sûrement plein de défauts (mais je n'ai pas le temps d'y réfléchir longtemps aujourd'hui) ; c'est déjà un miracle si j'ai pu sortir cela en si peu de temps :

Oui, et c'est certainement inversement proportionnel au temps qu'il va me falloir pour décortiquer le code :mrgreen:

Mais si je puis abuser, peux-tu préciser à quoi sert la fin du code ?

Code : Tout sélectionner

add(new void(picture pic, transform t) {
...
});

Pourquoi pas de simples commandes "draw" ? C'est une histoire d'unités lorsqu'on ajoute une picture à une autre ? Bon, l'écrire me fait penser que je ferai mieux de tester :oops:

Merci encore !
Fabrice Eudes
Debian Bullseye 11.4, Asymptote 2.79, texlive 2022, Emacs 27.1

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

Re: Flèche du bord d'un path au bord d'un autre

Message non lu par GM » lun. 8 oct. 2012, 17:19

mumblee a écrit :Pourquoi pas de simples commandes "draw" ?

Je vais te donner raison : pourquoi pas de simples commandes "draw"... dans la mesure où la taille des formes ne dépendent pas d'un label.


C'était inspiré de ce genre de chose :

Figure asymptote 7e620428b13c6412299f95bea3cbfc6a
*** 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 margin=1.5mm;
  2.  
  3. object left=align(object("$x^2$",ellipse,margin),W);
  4. add(left);
  5. object right=align(object("$\sin x$",ellipse,margin),4E);
  6. add(right);
  7. add(new void(frame f, transform t) {
  8. draw(f,point(left,NE,t)--point(right,W,t));
  9. });

... exemple de "deferred drawing" de la galerie officielle où la taille des enveloppes dépendent de la taille des labels, ce qui impose de différer certains tracés.

Mais il est vrai que, là, dans ce que tu as demandé et dans ce que j'ai proposé, la taille des formes n'ont pas à s'adapter à la taille d'un label donc il n'y a pas à différer le tracé des flèches et ceci doit être suffisant :

Figure asymptote 60e3f0db7fa80786e6637e4da267e9f4
*** 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(10cm);
  2. defaultpen(fontsize(8pt)+blue);
  3. struct forme{ path p;
  4. pair c;
  5. void operator init(path p, pair c=(0,0)){
  6. this.c=c;
  7. this.p=shift(-0.5*(min(p)+max(p)))*p;
  8. }
  9. void draw(picture pic=currentpicture,
  10. pen drawpen=currentpen+bp,
  11. pen fillpen=invisible,
  12. bool centreO=false){
  13. if(centreO){
  14. filldraw(pic, this.p, fillpen, drawpen);
  15. }else{
  16. filldraw(pic, shift(this.c)*this.p, fillpen, drawpen);
  17. }
  18. }
  19. }
  20.  
  21. pair point(forme F, pair dir, transform t=identity())
  22. {
  23. pair m=min(F.p);
  24. pair M=max(F.p);
  25. pair c=0.5*(m+M);
  26. pair z=t*F.c;
  27. real[] T=intersect(F.p,c--2*(m+realmult(rectify(dir),M-m))-c);
  28. if(T.length == 0) return z;
  29. return z+t*point(F.p,T[0]);
  30. }
  31.  
  32. forme q=forme((0,0)--(3,0)--(2.5,1.5)--(0.5,1)--cycle, (0, 1));
  33. forme p=forme(slant(0.5)*yscale(1.5)*xscale(2)*unitsquare, (0,-2));
  34. forme r=forme(xscale(3)*yscale(1.5)*unitsquare, (-4,-4));
  35. forme l=forme(scale(1.25)*xscale(1.5)*rotate(45)*unitsquare, (4,-4));
  36. forme c=forme(scale(2)*unitsquare, (0,-6));
  37.  
  38. q.draw();
  39. p.draw();
  40. r.draw(red);
  41. l.draw(2bp+.8green,yellow);
  42. c.draw();
  43.  
  44. draw(Label("$\fbox{... avec des cot\'es oppos\'es parall\`eles deux \`a deux}$",align=E),point(q,S){S}..{S}point(p,N),dashed,Arrow);
  45. draw(Label("$\fbox{... avec un angle droit}$",align=NW),point(p,W){W}..{S}point(r,N),dashed,Arrow);
  46. draw(Label("$\fbox{... avec 2 cot\'es cons\'ecutifs \'egaux}$",align=NE),point(p,E){E}..{S}point(l,N),dashed,Arrow);
  47. draw(Label("$\fbox{... avec 2 cot\'es cons\'ecutifs \'egaux}$",align=SW),point(r,S){S}..{E}point(c,W),dashed,Arrow);
  48. draw(Label("$\fbox{... avec un angle droit}$",align=SE),point(l,S){S}..{W}point(c,E),dashed,Arrow);
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