Label intégré à une flèche

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

Label intégré à une flèche

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

Bonjour,

En fait, cette demande est liée à mon message précédent portant sur les flèches.

La solution donnée par Gaëtan me convient très bien ; j'ai même presque compris le code. Il y a quand même la ligne donnant le point d'intersection (enfin la valeur réelle du paramètre correspondant au point d'intersection sur le chemin) qui reste mystérieuse.

Code : Tout sélectionner

real[] T=intersect(F.p,c--2*(m+realmult(rectify(dir),M-m))-c);

Je ne comprends pas le calcul du point "2*(m...)-c". En particulier la commande "rectify(dir)" que je ne trouve pas dans la doc d'asymptote (j'ai la version 2.15)

Bref, j'essaie d'ajouter des cercles au milieu des flèches, mais cela pourrait être des ellipses ou autre, et j'ai l'impression que je m'y prends mal. J'ai essayé d'utiliser un marker personnalisé (merci la gallerie) ou le marker prédéfini CircleBarIntervalMarker mais j'ai dû en faire une copie modifiée car cette routine trace le disque sans tracer le cercle indépendamment (c'est un constat, pas une critique).

Voici ma tentative. Ça me semble super lourd pour le résultat voulu. Est-ce qu'il serait plus malin de définir une nouvelle flèche ? Je n'ai jamais fait...

Figure asymptote f4e8eff6dea0574f562167158a083656
*** 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 markers;
  2. size(10cm);
  3.  
  4. struct forme{
  5. path p;
  6. pair c;
  7. void operator init(path p, pair c=(0,0)){
  8. this.c=c;
  9. this.p=shift(-0.5*(min(p)+max(p)))*p;
  10. }
  11. void draw(picture pic=currentpicture,
  12. pen drawpen=currentpen+bp,
  13. pen fillpen=invisible,
  14. bool centreO=false){
  15. if(centreO){
  16. filldraw(pic, this.p, fillpen, drawpen);
  17. }else{
  18. filldraw(pic, shift(this.c)*this.p, fillpen, drawpen);
  19. }
  20. }
  21. }
  22.  
  23. pair point(forme F, pair dir, transform t=identity())
  24. {
  25. pair m=min(F.p);
  26. pair M=max(F.p);
  27. pair c=0.5*(m+M);
  28. pair z=t*F.c;
  29. real[] T=intersect(F.p,c--2*(m+realmult(rectify(dir),M-m))-c);
  30. if(T.length == 0) return z;
  31. return z+t*point(F.p,T[0]);
  32. }
  33.  
  34. frame circlebarframeBord(int n=1, real barsize=0,
  35. real radius=0,real angle=0,
  36. pair offset=0, pen p=currentpen,
  37. filltype filltype=NoFill, bool above=false)
  38. {
  39. if(barsize == 0) barsize=barmarksize(p);
  40. if(radius == 0) radius=circlemarkradius(p);
  41. frame opic;
  42. path g=circle(offset,radius);
  43. frame f=stickframe(n,barsize,space=2*radius/(n+1),angle,offset,p);
  44. if(above) {
  45. add(opic,f);
  46. filltype.fill(opic,g,p);
  47. draw(opic,g,p);
  48. } else {
  49. filltype.fill(opic,g,p);
  50. draw(opic,g,p);
  51. add(opic,f);
  52. }
  53. return opic;
  54. }
  55.  
  56. marker CircleBarIntervalMarkerBord(int i=2, int n=1, real barsize=0, real radius=0,
  57. real angle=0, pair offset=0, bool rotated=true,
  58. pen p=currentpen, filltype filltype=NoFill,
  59. bool circleabove=false, frame uniform=newframe,
  60. bool above=true)
  61. {
  62. return marker(uniform,markinterval(i,circlebarframeBord(n,barsize,radius,angle,
  63. offset,p,filltype,
  64. circleabove),
  65. rotated),above);
  66. }
  67.  
  68. pair Orig=(0,0);
  69. forme q=forme((0,0)--(3,0)--(2.5,1.5)--(0.5,1)--cycle,Orig);
  70. forme p=forme(slant(0.5)*yscale(1.5)*xscale(2)*unitsquare,shift(2E+3S)*Orig);
  71.  
  72. q.draw();
  73. p.draw();
  74.  
  75. marker cercle=CircleBarIntervalMarkerBord(i=1,
  76. n=0,
  77. barsize=0,
  78. radius=10,
  79. angle=0,
  80. offset=0,
  81. rotated=true,
  82. currentpen,
  83. Fill(white),
  84. circleabove=false,
  85. above=true);
  86.  
  87. draw(point(q,S){S}..{S}point(p,N),Arrow,cercle);


Le but est d'avoir des labels vides, à compléter par les élèves.

Bon dimanche à tous !
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: Label intégré à une flèche

Message non lu par GM » dim. 14 oct. 2012, 21:11

Bonsoir,
j'ai vu les deux demandes... mais je suis actuellement débordé... donc si une réponse tombe rapidement, elle ne sera pas de moi.
Désolé.
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: Label intégré à une flèche

Message non lu par mumblee » lun. 15 oct. 2012, 06:00

Aucun souci Gaëtan.Ce ne sont pas des urgences.

Bon courage pour le boulot !
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: Label intégré à une flèche

Message non lu par GM » mar. 16 oct. 2012, 17:08

C'est le fruit de très peu de réflexion... mais je suis overbooké en ce moment :

Figure asymptote 58d23f9fb9b91efc9b48f1913e082fc9
*** 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 markers;
  2. size(10cm);
  3.  
  4. struct forme{
  5. path p;
  6. pair c;
  7. void operator init(path p, pair c=(0,0)){
  8. this.c=c;
  9. this.p=shift(-0.5*(min(p)+max(p)))*p;
  10. }
  11. void draw(picture pic=currentpicture,
  12. pen drawpen=currentpen+bp,
  13. pen fillpen=invisible,
  14. bool centreO=false){
  15. if(centreO){
  16. filldraw(pic, this.p, fillpen, drawpen);
  17. }else{
  18. filldraw(pic, shift(this.c)*this.p, fillpen, drawpen);
  19. }
  20. }
  21. }
  22.  
  23. pair point(forme F, pair dir, transform t=identity())
  24. {
  25. pair m=min(F.p);
  26. pair M=max(F.p);
  27. pair c=0.5*(m+M);
  28. pair z=t*F.c;
  29. real[] T=intersect(F.p,c--2*(m+realmult(rectify(dir),M-m))-c);
  30. if(T.length == 0) return z;
  31. return z+t*point(F.p,T[0]);
  32. }
  33. void lier(forme f1, forme f2,
  34. pair a_pt=S,
  35. pair a_dir=S,
  36. pair b_pt=N,
  37. pair b_dir=S,
  38. path cadre=unitcircle,
  39. pen couldraw=blue,
  40. pen coulfill=white,
  41. transform sc=scale(.25)){
  42. path liaison1 = point(f1,a_pt){a_dir}..{b_dir}point(f2,b_pt);
  43. draw(liaison1,Arrow);
  44. filldraw(shift(point(liaison1,.5))*sc*cadre,coulfill,couldraw);
  45. }
  46.  
  47. pair Orig=(0,0);
  48. forme q=forme((0,0)--(3,0)--(2.5,1.5)--(0.5,1)--cycle,Orig);
  49. forme p=forme(slant(0.5)*yscale(1.5)*xscale(2)*unitsquare,shift(2E+3S)*Orig);
  50.  
  51. q.draw();
  52. p.draw();
  53. lier(q,p);
  54. lier(q,p,a_pt=SW,a_dir=SE,b_pt=W,b_dir=E,cadre=polygon(5),coulfill=yellow);
  55. lier(q,p,a_pt=E,a_dir=E,b_pt=NE,b_dir=S,cadre=polygon(3),couldraw=2bp+red);


Je ne doute pas que je changerais beaucoup de choses... si j'avais le temps d'y réfléchir sérieusement
mais si cela peut dépanner pour une éventuelle urgence, ce sera déjà cela.
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: Label intégré à une flèche

Message non lu par GM » mer. 17 oct. 2012, 19:56

Je viens de relire le titre du sujet auquel je n'avais pas prêté suffisamment attention.

Et je me dis que je me suis peut-être laissé influencer par ce qui était proposé : j'ai cru qu'il ne fallait pas de texte dans le cercle.
Qu'en est-il ?
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 !

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Label intégré à une flèche

Message non lu par maurice » jeu. 18 oct. 2012, 03:08

GM a écrit :Je viens de relire le titre du sujet auquel je n'avais pas prêté suffisamment attention.

Et je me dis que je me suis peut-être laissé influencer par ce qui était proposé : j'ai cru qu'il ne fallait pas de texte dans le cercle.
Qu'en est-il ?
mumblee a écrit :Le but est d'avoir des labels vides, à compléter par les élèves.

Je crois que tu as bien fait !

maurice
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

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

Re: Label intégré à une flèche

Message non lu par GM » jeu. 18 oct. 2012, 05:20

maurice a écrit :Je crois que tu as bien fait !

J'ai dû le lire et je l'avais déjà oublié : je suis poisson et la mémoire qui va avec. :mrgreen:

---------

S'il faut écrire dans les formes, j'attire l'attention sur l'argument suivant :

Code : Tout sélectionner

transform sc

pour un réglage global de la taille des formes.

Après j'ai mis trois formes différentes avec le cercle comme choix par défaut
mais le mieux ne sera t-il pas une ellipse (comme choix par défaut pour pouvoir écrire ?

Pour le choix par défaut d'une flèche... je fais passer du point au sud d'une forme au point au nord d'une autre, avec des directions vers le sud aux extrémités. Mais peut-être qu'un choix par défaut pourrait être la ligne droite qui joint les centres.
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