Page 1 sur 1
Ne pas "étendre" le tracé d'une tangente
Posté : mer. 26 sept. 2012, 17:33
par Fabrice
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.
*** 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
import geometry;
unitsize(2cm,2cm);
usepackage("kpfonts");
pen p =fontsize(10pt);
pair z0=(0,0), z1=(3,0), z2=(3,3), z3=(0,3);
path g=z0--z1--z2--z3--cycle;
circle c=circle(z1,-z1);
arc a=arc(c,0,90);
pair z4=point(a,22);
line t=tangent(c,z4);
line l1=line(z0,z4);
line l2=line(z2,z3);
line l3=line(z1,z2);
pair z5=intersectionpoint(t,l2);
pair z6=intersectionpoint(t,l3);
pair sommet[]={z0,z1,z2,z3,z4,z5,z6};
string nom[]={"A", "B", "C", "D", "T", "M", "N"};
pair direction[] ={SW,SE,NE,NW,dir(z4-z0),NE,2*E};
draw(g^^z0--z4);
draw(t);
draw(a,red);
for(int k=0; k<nom.length; ++k) label(nom[k],sommet[k],direction[k],p);
perpendicularmark( t, l1,size=0.2cm);
draw(t);
Merci.
Re: Ne pas "étendre" le tracé d'une tangente
Posté : mer. 26 sept. 2012, 18:00
par GM
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".
*** 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
import geometry;
unitsize(2cm,2cm);
usepackage("kpfonts");
pen p =fontsize(10pt);
point z0=(0,0), z1=(3,0), z2=(3,3), z3=(0,3);
path g=z0--z1--z2--z3--cycle;
circle c=circle(z1,-z1);
arc a=arc(c,0,90);
point z4=point(a,22);
line t=tangent(c,z4);
line l1=line(z0,z4);
line l2=line(z2,z3);
line l3=line(z1,z2);
point z5=intersectionpoint(t,l2);
point z6=intersectionpoint(t,l3);
point sommet[]={z0,z1,z2,z3,z4,z5,z6};
string nom[]={"A", "B", "C", "D", "T", "M", "N"};
pair direction[] ={SW,SE,NE,NW,unit(z4-z0),N,E};
draw(g^^z0--z4);
marker croix=marker(scale(2)*cross(4),1bp+red);
draw(segment(z5,z6),croix);
draw(a,red);
for(int k=0; k<nom.length; ++k) label(nom[k],sommet[k],direction[k],p);
perpendicularmark( t, l1,size=0.2cm);
Re: Ne pas "étendre" le tracé d'une tangente
Posté : mer. 26 sept. 2012, 18:20
par GM
Suggestion d'éclaircissement du code :
*** 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
import geometry;
unitsize(2cm,2cm);
usepackage("kpfonts");
pen p =fontsize(10pt);
point z0=(0,0), z1=(3,0), z2=(3,3), z3=(0,3);
path g=box(z0,z2);
circle c=circle(z1,-z1);
arc a=arc(c,0,90);
point z4=point(a,22);
line t=tangent(c,z4),
l1=line(z0,z4),
l2=line(z2,z3),
l3=line(z1,z2);
point z5=intersectionpoint(t,l2),
z6=intersectionpoint(t,l3);
draw(g^^z0--z4);
draw(a,red);
marker croix=marker(scale(2)*cross(4),1bp+red);
draw(segment(z5,z6),croix);
// Gestion "en tableau" des Labels des points
point sommet[]={z0,z1,z2,z3,z4,z5,z6};
string nom[]={"A", "B", "C", "D", "T", "M", "N"};
pair direction[] ={SW,SE,NE,NW,unit(z4-z0),N,E};
for(int k=0; k<nom.length; ++k) label(nom[k],sommet[k],direction[k],p);
perpendicularmark(t, l1,size=0.2cm);
Re: Ne pas "étendre" le tracé d'une tangente
Posté : mer. 26 sept. 2012, 18:25
par Fabrice
Bonsoir Gaëtan,
Merci pour l'amélioration apportée à ce code. J'ai d'ailleurs une petite question par rapport à ceci :
Que représente exactement le real x par rapport à l'arc a ?
Merci.
Re: Ne pas "étendre" le tracé d'une tangente
Posté : mer. 26 sept. 2012, 18:44
par GM
Fabrice a écrit :J'ai d'ailleurs une petite question par rapport à ceci :
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 :
Quelle meilleure explication que cette figure ?
*** 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
import geometry;
unitsize(2cm,2cm);
usepackage("kpfonts");
pen p =fontsize(10pt);
point z0=(0,0), z1=(3,0), z2=(3,3), z3=(0,3);
path g=box(z0,z2);;
circle c=circle(z1,-z1);
arc a=arc(c,0,90);
point z4=point(a,22);
line t=tangent(c,z4),
l1=line(z0,z4),
l2=line(z2,z3),
l3=line(z1,z2);
point z5=intersectionpoint(t,l2),
z6=intersectionpoint(t,l3);
draw(g^^z0--z4);
draw(a,red,dot());
marker croix=marker(scale(2)*cross(4),1bp+red);
draw(segment(z5,z6),croix);
// Gestion "en tableau" des Labels des points
point sommet[]={z0,z1,z2,z3,z4,z5,z6};
string nom[]={"A", "B", "C", "D", "T", "M", "N"};
pair direction[] ={SW,SE,NE,NW,unit(z4-z0),N,E};
for(int k=0; k<nom.length; ++k) label(nom[k],sommet[k],direction[k],p);
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 ?
Re: Ne pas "étendre" le tracé d'une tangente
Posté : mer. 26 sept. 2012, 19:24
par GM
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 :
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 :
On va avoir :
- 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).
- 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).
- 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
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 !
Re: Ne pas "étendre" le tracé d'une tangente
Posté : mer. 26 sept. 2012, 19:31
par GM
Et donc je finis en suggérant de remplacer :
par
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.
Re: Ne pas "étendre" le tracé d'une tangente
Posté : jeu. 27 sept. 2012, 16:11
par Fabrice
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