Réutiliser une construction à l'extérieur d'un programme.

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 !
malaka
Messages : 14
Enregistré le : ven. 14 juil. 2017, 11:37

Réutiliser une construction à l'extérieur d'un programme.

Message non lu par malaka » lun. 24 avr. 2023, 12:53

Bonjour j'ai écrit ce programme qui me permet de créer un triangle rectangle à partir des deux sommets de l'hypoténuse.
J'aimerais récupérer le chemin T une fois le programme lancé pour le réutiliser par la suite. Je ne vois pas comment faire.

Code : Tout sélectionner

void TRH(pair a, pair b, bool direction=true){ // Construire un triangle rectangle par les 2 sommets de l'hypoténuse
pair c=(a+b)/2; // milieu de l'hypoténuse
path DC; /// demi-cercle
	if(direction==true){DC=arc(c,a,b);}
	else {DC=arc(c,a,b,CW);}
pair d=relpoint(DC,0.3);  // Le sommet de l'angle droit.
fill(a--d--b--cycle,lightgrey);
path T=a--d--b--cycle;
}
Asymptote me renvoie "no matching variable 'T' ". En gros le triangle n'existe pas à l'extérieur de TRH.
Merci d'avance.
Window 11 - TeX live 2023
TeXmaker 5.1.3 -Asymptote 2.79

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

Re: Réutiliser une construction à l'extérieur d'un programme.

Message non lu par GM » lun. 24 avr. 2023, 13:01

Bonjour,

sur cette page https://asy.marris.fr/asymptote/Prog_Fo ... index.html,
on trouve deux exemples pour tenter d'expliquer la différence entre

1. une procédure (qui correspond au type void) qui est une fonction qui exécute une action mais ne renvoie pas de donnée(s) ;

2. une fonction typée (real[] dans l'exemple, mais on peut avoir tous les types que l'on connait dans asymptote) qui permet de retourner quelque chose via la commande return.

GM
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 : 1516
Enregistré le : dim. 7 mars 2010, 14:50

Re: Réutiliser une construction à l'extérieur d'un programme.

Message non lu par GM » lun. 24 avr. 2023, 13:07

Si je donne un coup de pouce supplémentaire, cela donne cela :

Figure asymptote 0fd0fb591545eed28b68cf4fc1f78ae4
*** 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.  
  3. path TRH(pair a, pair b, bool direction=true){ // Construire un triangle rectangle par les 2 sommets de l'hypoténuse
  4. pair c=(a+b)/2; // milieu de l'hypoténuse
  5. path DC; /// demi-cercle
  6. if(direction==true){DC=arc(c,a,b);}
  7. else {DC=arc(c,a,b,CW);}
  8. pair d=relpoint(DC,0.3); // Le sommet de l'angle droit.
  9. fill(a--d--b--cycle,lightgrey);
  10. return a--d--b--cycle;
  11. }
  12.  
  13. draw(TRH((0,0),(4,3)),green);
  14. draw(TRH((0,0),(-4,3)),red);


NB : j'ai changé le void et modifié la dernière ligne pour l'ajout du return mais je n'ai pas cherché à regarder le reste du code pour voir si j'aurais fait (ou pas) de la même manière.
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 : 1516
Enregistré le : dim. 7 mars 2010, 14:50

Re: Réutiliser une construction à l'extérieur d'un programme.

Message non lu par GM » lun. 24 avr. 2023, 13:18

A propos de triangle dans Asymptote, je rappelle que l'extension geometry de Philippe Ivaldi qui a été intégrée dans Asymptote, définit le type triangle :

https://asy.marris.fr/asymptote/Triangl ... 8_triangle

L'avantage de définir un triangle comme un objet de type triangle et non de type path, c'est que l'on peut ensuite obtenir des points et des droites particuliers relatifs au triangle, sans calcul, uniquement en utilisant les fonctions que Philippe a défini pour les objets de type triangle.
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 !

malaka
Messages : 14
Enregistré le : ven. 14 juil. 2017, 11:37

Re: Réutiliser une construction à l'extérieur d'un programme.

Message non lu par malaka » lun. 24 avr. 2023, 13:54

Merci.
Dans les triangles de Philippe Ivaldi je n'ai pas trouvé la structure triangleABc (on donne deux angles et le côté entre eux) ni celui que je voulais pour ce cas précis.

Pour le VOID j'ai tout simplement recopié l'un de tes programmes en changeant ce que je comprenais et laissant le reste :D
Je ne trouvais pas la fonction return dans l'index d'ASymptote mais je crois comprendre à peu près ce qu'elle fait avec tes deux exemples et du coup je peux même retirer la ligne
fill(a--d--b--cycle,lightgrey);

C'est exactement ce que je cherchais à faire. Merci beaucoup.
Window 11 - TeX live 2023
TeXmaker 5.1.3 -Asymptote 2.79

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

Re: Réutiliser une construction à l'extérieur d'un programme.

Message non lu par GM » lun. 24 avr. 2023, 13:56

Je n'ai répondu ci-dessus que du point de vue "technique de programmation avec Asymptote"
mais je viens de réfléchir au point de vue Mathématiques de la question posée :
Des triangles rectangles dont A(0;0) et B(4;3) sont les extrémités de l'hypothénuse, il y en a une infinité
donc c'est bizarre de définir une fonction qui ne peut renvoyer que le triangle dans les deux cas particuliers où le point C a pour "abscisse curviligne" 0.3 sur le demi-cercle. Ne faut-il pas ajouter un paramètre avec une valeur par défaut pour définir le troisième point ? Et ce paramètre ne peut-il pas être plutôt, l'angle en A plutôt qu'une abscisse curviligne par rapport au demi-cercle ?
Je dis cela mais je ne sais pas quel sera l'usage de cette fonction, donc je ferais mieux de me taire. :D
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 : 1516
Enregistré le : dim. 7 mars 2010, 14:50

Re: Réutiliser une construction à l'extérieur d'un programme.

Message non lu par GM » lun. 24 avr. 2023, 14:03

malaka a écrit :
lun. 24 avr. 2023, 13:54
et du coup je peux même retirer la ligne
fill(a--d--b--cycle,lightgrey);
oui et utiliser filldraw si tu veux colorer l'un des triangles :

Figure asymptote baaccbcd02da2c750d1f05d39dd64484
*** 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.  
  3. path TRH(pair a, pair b, bool direction=true){ // Construire un triangle rectangle par les 2 sommets de l'hypoténuse
  4. pair c=(a+b)/2; // milieu de l'hypoténuse
  5. path DC; /// demi-cercle
  6. if(direction==true){DC=arc(c,a,b);}
  7. else {DC=arc(c,a,b,CW);}
  8. pair d=relpoint(DC,0.3); // Le sommet de l'angle droit.
  9. return a--d--b--cycle;
  10. }
  11.  
  12. filldraw(TRH((0,0),(4,3)),lightgrey,red);
  13. draw(TRH((-4,3),(0,0),false),green);
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 !

malaka
Messages : 14
Enregistré le : ven. 14 juil. 2017, 11:37

Re: Réutiliser une construction à l'extérieur d'un programme.

Message non lu par malaka » lun. 24 avr. 2023, 15:05

GM a écrit :
lun. 24 avr. 2023, 13:56
Je n'ai répondu ci-dessus que du point de vue "technique de programmation avec Asymptote"
mais je viens de réfléchir au point de vue Mathématiques de la question posée :
Des triangles rectangles dont A(0;0) et B(4;3) sont les extrémités de l'hypothénuse, il y en a une infinité
donc c'est bizarre de définir une fonction qui ne peut renvoyer que le triangle dans les deux cas particuliers où le point C a pour "abscisse curviligne" 0.3 sur le demi-cercle. Ne faut-il pas ajouter un paramètre avec une valeur par défaut pour définir le troisième point ? Et ce paramètre ne peut-il pas être plutôt, l'angle en A plutôt qu'une abscisse curviligne par rapport au demi-cercle ?
Je dis cela mais je ne sais pas quel sera l'usage de cette fonction, donc je ferais mieux de me taire. :D
Sur le fond mathématiques tu as raison mais pour mon usage les 2 cas (CW et CCW) me suffisent. Si j'arrive à obtenir la figure finale que je veux (une succession de triangles rectangles et des 3 carrés attachés aux côtés) je le posterais et je verrais pour affiner.
Window 11 - TeX live 2023
TeXmaker 5.1.3 -Asymptote 2.79

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

Re: Réutiliser une construction à l'extérieur d'un programme.

Message non lu par GM » lun. 24 avr. 2023, 19:15

J'ai cru voir passer la tentative suivante.
Je suis alerté des tentatives de codes sur le forum ! ;-)

J'ai mis size(100) et une couleur plus foncée pour que cela passe sur le forum.

Figure asymptote a21ccfe7e66c4b748dac307d694dbbf4
*** 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 geometry;
  2. size(100);
  3.  
  4. path TRH(pair a, pair b, bool direction=true){ // Construire un triangle rectangle par les 2 sommets de l'hypoténuse
  5. pair c=(a+b)/2; // milieu de l'hypoténuse
  6. path DC; /// demi-cercle
  7. if(direction==true){DC=arc(c,a,b);}// Sens de construction (in)direct
  8. else {DC=arc(c,a,b,CW);}
  9. pair d=relpoint(DC,0.3); // Le sommet de l'angle droit.
  10. return a--d--b--cycle;
  11. }
  12. path[] carres(path t){// Construire les carrés sur les trois côtés d'un triangle
  13. path[] carres;
  14. for(int i=0; i<3; ++i){
  15. carres.push(square(point(t,i+1),point(t,i))); // Rajoute chaque carré dans le tableau
  16. }
  17. return carres;
  18. }
  19. pair A=(0,0), B=(1,0), C=B+3dir(90);
  20. path t1=A--B--C--cycle;
  21.  
  22. fill(t1,grey);
  23. fill(TRH(point(carres(t1)[2],2),point(carres(t1)[2],3)),grey);
  24. fill(TRH(point(carres(t1)[0],2),point(carres(t1)[0],3)),grey);
  25. fill(TRH(point(carres(t1)[1],2),point(carres(t1)[1],3)),grey);
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 !

malaka
Messages : 14
Enregistré le : ven. 14 juil. 2017, 11:37

Re: Réutiliser une construction à l'extérieur d'un programme.

Message non lu par malaka » mar. 25 avr. 2023, 09:21

Big brother is watching :lol:
J'arrive pas à poster d'image ni de code comme tu le fais dans ton message précédent :cry: :?: . Dommage ! Ma construction fonctionne et donne exactement ce que je voulais.
J'essaie de fignoler aujourd'hui pour le plaisir.
Window 11 - TeX live 2023
TeXmaker 5.1.3 -Asymptote 2.79

Répondre