Ne pas "étendre" le tracé d'une tangente

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 !
Fabrice
Messages : 118
Enregistré le : sam. 13 mars 2010, 11:41

Ne pas "étendre" le tracé d'une tangente

Message non lu par Fabrice » mer. 26 sept. 2012, 17:33

Bonsoir,
Dans le code ci-après, je souhaiterais que la tangente en M à l'arc BD "s'arrête" au niveau des points d'intersection M et N.

Figure asymptote ae365fafb73d940663b8bdf73fe561ef
*** 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. unitsize(2cm,2cm);
  3. usepackage("kpfonts");
  4. pen p =fontsize(10pt);
  5. pair z0=(0,0), z1=(3,0), z2=(3,3), z3=(0,3);
  6. path g=z0--z1--z2--z3--cycle;
  7. circle c=circle(z1,-z1);
  8. arc a=arc(c,0,90);
  9. pair z4=point(a,22);
  10. line t=tangent(c,z4);
  11. line l1=line(z0,z4);
  12. line l2=line(z2,z3);
  13. line l3=line(z1,z2);
  14. pair z5=intersectionpoint(t,l2);
  15. pair z6=intersectionpoint(t,l3);
  16. pair sommet[]={z0,z1,z2,z3,z4,z5,z6};
  17. string nom[]={"A", "B", "C", "D", "T", "M", "N"};
  18. pair direction[] ={SW,SE,NE,NW,dir(z4-z0),NE,2*E};
  19. draw(g^^z0--z4);
  20. draw(t);
  21. draw(a,red);
  22. for(int k=0; k<nom.length; ++k) label(nom[k],sommet[k],direction[k],p);
  23. perpendicularmark( t, l1,size=0.2cm);
  24. draw(t);

Merci.
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

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

Re: Ne pas "étendre" le tracé d'une tangente

Message non lu par GM » mer. 26 sept. 2012, 18:00

Bonjour,

Pour avoir un segment au lieu de la ligne... on peut demander le tracé d'un objet de type segment au lieu du type line.

voilà une suggestion... avec quelques modifications supplémentaires.

Notamment... celle d'utiliser le type "point" si on utilise "geometry".

J'en ai profité pour rappeler comment on utilise un "marker".

Figure asymptote 165f29e6a9d5eda8a90e483ac9b90a25
*** 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. unitsize(2cm,2cm);
  3. usepackage("kpfonts");
  4. pen p =fontsize(10pt);
  5. point z0=(0,0), z1=(3,0), z2=(3,3), z3=(0,3);
  6. path g=z0--z1--z2--z3--cycle;
  7. circle c=circle(z1,-z1);
  8. arc a=arc(c,0,90);
  9. point z4=point(a,22);
  10. line t=tangent(c,z4);
  11. line l1=line(z0,z4);
  12. line l2=line(z2,z3);
  13. line l3=line(z1,z2);
  14. point z5=intersectionpoint(t,l2);
  15. point z6=intersectionpoint(t,l3);
  16. point sommet[]={z0,z1,z2,z3,z4,z5,z6};
  17. string nom[]={"A", "B", "C", "D", "T", "M", "N"};
  18. pair direction[] ={SW,SE,NE,NW,unit(z4-z0),N,E};
  19. draw(g^^z0--z4);
  20. marker croix=marker(scale(2)*cross(4),1bp+red);
  21. draw(segment(z5,z6),croix);
  22. draw(a,red);
  23. for(int k=0; k<nom.length; ++k) label(nom[k],sommet[k],direction[k],p);
  24. perpendicularmark( t, l1,size=0.2cm);
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: Ne pas "étendre" le tracé d'une tangente

Message non lu par GM » mer. 26 sept. 2012, 18:20

Suggestion d'éclaircissement du code :

Figure asymptote 522f3db8939d83d91e6c1da34a989f32
*** 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. unitsize(2cm,2cm);
  3. usepackage("kpfonts");
  4. pen p =fontsize(10pt);
  5.  
  6. point z0=(0,0), z1=(3,0), z2=(3,3), z3=(0,3);
  7. path g=box(z0,z2);
  8. circle c=circle(z1,-z1);
  9. arc a=arc(c,0,90);
  10. point z4=point(a,22);
  11. line t=tangent(c,z4),
  12. l1=line(z0,z4),
  13. l2=line(z2,z3),
  14. l3=line(z1,z2);
  15. point z5=intersectionpoint(t,l2),
  16. z6=intersectionpoint(t,l3);
  17.  
  18. draw(g^^z0--z4);
  19. draw(a,red);
  20. marker croix=marker(scale(2)*cross(4),1bp+red);
  21. draw(segment(z5,z6),croix);
  22.  
  23. // Gestion "en tableau" des Labels des points
  24. point sommet[]={z0,z1,z2,z3,z4,z5,z6};
  25. string nom[]={"A", "B", "C", "D", "T", "M", "N"};
  26. pair direction[] ={SW,SE,NE,NW,unit(z4-z0),N,E};
  27. for(int k=0; k<nom.length; ++k) label(nom[k],sommet[k],direction[k],p);
  28.  
  29. perpendicularmark(t, l1,size=0.2cm);
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 !

Fabrice
Messages : 118
Enregistré le : sam. 13 mars 2010, 11:41

Re: Ne pas "étendre" le tracé d'une tangente

Message non lu par Fabrice » mer. 26 sept. 2012, 18:25

Bonsoir Gaëtan,
Merci pour l'amélioration apportée à ce code. J'ai d'ailleurs une petite question par rapport à ceci :

Code : Tout sélectionner

point point(arc a, real x)

Que représente exactement le real x par rapport à l'arc a ?
Merci.
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

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

Re: Ne pas "étendre" le tracé d'une tangente

Message non lu par GM » mer. 26 sept. 2012, 18:44

Fabrice a écrit :J'ai d'ailleurs une petite question par rapport à ceci :

Code : Tout sélectionner

point point(arc a, real x)


Que représente exactement le real x par rapport à l'arc a ?


Est-ce que cette explication en anglais est suffisante ?

http://www.piprime.fr/files/asymptote/geometry/modules/geometry.asy.html#point(arc,real)

Ta question m'a fait réaliser que tu as écrit :

Code : Tout sélectionner

z4=point(a,22);


Quelle meilleure explication que cette figure ?

Figure asymptote b6fdb944787dc80bfbe41a6d7f50468c
*** 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. unitsize(2cm,2cm);
  3. usepackage("kpfonts");
  4. pen p =fontsize(10pt);
  5.  
  6. point z0=(0,0), z1=(3,0), z2=(3,3), z3=(0,3);
  7. path g=box(z0,z2);;
  8. circle c=circle(z1,-z1);
  9. arc a=arc(c,0,90);
  10. point z4=point(a,22);
  11. line t=tangent(c,z4),
  12. l1=line(z0,z4),
  13. l2=line(z2,z3),
  14. l3=line(z1,z2);
  15. point z5=intersectionpoint(t,l2),
  16. z6=intersectionpoint(t,l3);
  17.  
  18. draw(g^^z0--z4);
  19. draw(a,red,dot());
  20. marker croix=marker(scale(2)*cross(4),1bp+red);
  21. draw(segment(z5,z6),croix);
  22.  
  23. // Gestion "en tableau" des Labels des points
  24. point sommet[]={z0,z1,z2,z3,z4,z5,z6};
  25. string nom[]={"A", "B", "C", "D", "T", "M", "N"};
  26. pair direction[] ={SW,SE,NE,NW,unit(z4-z0),N,E};
  27. for(int k=0; k<nom.length; ++k) label(nom[k],sommet[k],direction[k],p);
  28.  
  29. perpendicularmark(t, l1,size=0.2cm);

L'ajout d'un dot() dans le tracé de l'arc montre bien à quoi correspond le 22.

Maintenant, il est vrai qu'il vaudrait mieux changer de méthode pour décider de la place du point T... si l'idée d'afficher préalablement les noeuds qui ont défini le path de l'arc ne te plait pas. Je suppose que tu avais tâtonné pour trouver le 22. Non ?
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: Ne pas "étendre" le tracé d'une tangente

Message non lu par GM » mer. 26 sept. 2012, 19:24

Histoire d'être complet sur le sujet... et pour expliquer le nodabscissa que tu auras remarqué en suivant le lien que j'ai donné :

Je rappelle que l'extension geometry définit le type abscissa.
On peut créer donc des variables qui soient des instances de ce type, pour désigner des abscisses sur un objet de type line, segment, conic ou arc.

Dans la structure d’un objet de type abscissa, on notera notamment deux attributs importants :

Code : Tout sélectionner

real x;
int system;


x est évidemment la valeur de l'abscisse.

system est le type d'abscisse !
  • 0 pour une abscisse comme fraction de la longueur d’un chemin ;
  • 1 pour une abscisse curviligne ;
  • 2 pour une abscisse angulaire ;
  • 3 pour une abscisse relative aux noeuds du chemin.
Il y a donc beaucoup de fonctions pour définir une abscisse puisqu'il y a plusieurs types d'abscisses.

Une fois une abscisse définie, on peut récupérer le point d’un objet à cette abscisse par la routine :

Code : Tout sélectionner

point(objet,abscisse)


On va avoir :
  • Code : Tout sélectionner

    abscissa relabscissa(real x)
    pour retourner l’abscisse x comme fraction de la longueur d’un chemin.
    On notera que le code point(objet,relabscissa(x)) est équivalent à relpoint(objet,x).

  • Code : Tout sélectionner

    abscissa curabscissa(real x)
    pour retourner l’abscisse curviligne x.
    On notera que le code point(objet,curabscissa(x)) est équivalent à curpoint(objet,x).

  • Code : Tout sélectionner

    abscissa angabscissa(real x, polarconicroutine polarconicroutine=currentpolarconicroutine)
    pour retourner l’abscisse angulaire x.
    On notera que le code point(objet,angabscissa(x)) est équivalent à angpoint(objet,x).

  • Code : Tout sélectionner

    abscissa nodabscissa(real x)
    pour retourner l’abscisse x relative aux noeuds d’un chemin.
    On notera que le code point(objet,nodabscissa(x)) est équivalent à point(objet,x).

Et donc......... si le second attribut de la notation

Code : Tout sélectionner

point(objet,abscisse)
n'est pas de type abscissa mais s'il est de type real, l'explication en anglais du lien t'a montré qu'il sera considéré comme une abscisse relative aux noeuds du chemin.


Beaucoup d'autres choses à découvrir dans la documentation de l'extension geometry ! ;-)
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: Ne pas "étendre" le tracé d'une tangente

Message non lu par GM » mer. 26 sept. 2012, 19:31

Et donc je finis en suggérant de remplacer :

Code : Tout sélectionner

point  z4=point(a,22);
par

Code : Tout sélectionner

point  z4=relpoint(a,1/3);


Le tiers de l'arc... c'est plus clair que le noeud indicé 22 sur un arc dont on ne sait pas exactement combien il a de noeuds au moment où on le définit.
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 !

Fabrice
Messages : 118
Enregistré le : sam. 13 mars 2010, 11:41

Re: Ne pas "étendre" le tracé d'une tangente

Message non lu par Fabrice » jeu. 27 sept. 2012, 16:11

Bonjour,
GM a écrit :Je suppose que tu avais tâtonné pour trouver le 22. Non ?

Euh, oui ...
GM a écrit :Histoire d'être complet sur le sujet

Merci beaucoup, j'ai pris le temps de tout comprendre.
@+ Fabrice
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

Répondre