http://wiki.noordover.org, un wiki dont l'objectif est modeste : permettre d'écrire facilement, en vrac, à un rythme de sénateur, quelques trucs et astuces divers, pour ne pas les oublier et aider éventuellement d'autres personnes.
Retour au Sommaire de la section du wiki relative Ă Asymptote
[[ Asymptote : fonction DIR ]]
Cette page n'est pas achevée… mais je pense qu'elle peut déjà aider à comprendre quelques subtilités de la fonction DIR..
Fonction DIR : de type pair
Fonction DIR : syntaxe n°1
pair dir(real angle)
définit le point (le vecteur unitaire) de coordonnées
si l'angle est
en degrés.
/*---------------------------------------------*/ import markers; size(4cm,0); pair A=0, B=(1.5,0), C=dir(45), D=dir(-30); draw(A--B); draw(Label("dir(45)", EndPoint), A--C, .5bp+red, Arrow); draw(Label("dir(-30)", EndPoint), A--D, .5bp+blue, Arrow); markangle("$45°$",radius=40,B,A,C, ArcArrow(2mm),.5mm+red); markangle("$-30°$",radius=-30,B,A,D, ArcArrow(2mm),.5mm+blue); /*---------------------------------------------*/ | ![]() |
|---|
pair expi(real angle)
est la fonction analogue avec l'angle en radians.
Fonction DIR : syntaxe n°2
pair dir(path p, int t, int sign=0);
Lorsque sign<0, la fonction renvoie la direction (les coordonnées d'un vecteur unitaire) de la demi-tangente “entrante” au noeud t du chemin p.
Dans l'exemple qui suit, avec sign=-1<0 :
- dir(p,0,-1) est le vecteur nul car
est le noeud 0 du chemin p. (pas de demi-tangente “entrante”) - dir(p,1,-1) est le vecteur unitaire
qui dirige la demi-tangente “entrante” au noeud 1 (point
) du chemin p. - dir(p,2,-1) est le vecteur unitaire
qui dirige la demi-tangente “entrante” au noeud 2 (point
) du chemin p.
/*---------------------------------------------*/ size(4cm,0); pair O=(0,0), A=(-1,3), B=(0,1.5), C=(2,2); path p=A{dir(-80)} ..{dir(-80)}B{dir(10)} ..C{dir(-10)}; pair T0e=dir(p,0,-1); pair T1e=dir(p,1,-1); pair T2e=dir(p,2,-1); dot("$A_{(0)}$",A,N); dot("$B_{(1)}$",B,S); dot("$C_{(2)}$",C,N); draw(Label("$\vec{T_1e}$", MidPoint, fontsize(10pt)), (B-T1e)--B, .5bp+red, Arrow); draw(Label("$\vec{T_2e}$", MidPoint, fontsize(10pt)), (C-T2e)--C, .5bp+red, Arrow); draw(p); /*---------------------------------------------*/ | ![]() |
|---|
Lorsque sign>0, la fonction renvoie la direction (les coordonnées d'un vecteur unitaire) de la demi-tangente “sortante” au noeud t du chemin p.
Dans l'exemple qui suit, avec sign=1>0 :
- dir(p,0,1) est le vecteur unitaire
qui dirige la demi-tangente “sortante” au noeud 0 (point
) du chemin p. - dir(p,1,1) est le vecteur unitaire
qui dirige la demi-tangente “sortante” au noeud 1 (point
) du chemin p. - dir(p,2,1) est le vecteur nul car
est le dernier noeud du chemin p. (pas de demi-tangente “sortante”)
/*---------------------------------------------*/ size(4cm,0); pair O=(0,0), A=(-1,3), B=(0,1.5), C=(2,2); path p=A{dir(-80)} ..{dir(-80)}B{dir(10)} ..C{dir(-10)}; pair T0s=dir(p,0,1); pair T1s=dir(p,1,1); pair T2s=dir(p,2,1); dot("$A_{(0)}$",A,N); dot("$B_{(1)}$",B,S); dot("$C_{(2)}$",C,N); draw(Label("$\vec{T_0s}$", MidPoint, fontsize(10pt)), A--A+T0s, .5bp+blue, Arrow); draw(Label("$\vec{T_1s}$", MidPoint, fontsize(10pt)), B--B+T1s, .5bp+blue, Arrow); draw(p); /*---------------------------------------------*/ | ![]() |
|---|
Lorsque sign=0, la fonction renvoie la direction de la bissectrice de l'angle défini par les demi-tangentes “entrante” et “sortante” au noeud t du chemin p. Pour le premier noeud du chemin et pour le dernier, c'est particulier : la fonction renvoie la direction de la demi-tangente “sortante” pour le noeud 0 et celle de la demi-tangente “entrante” pour le dernier noeud.
Dans l'exemple qui suit, avec sign=0 :
- dir(p,0,0) est le vecteur unitaire
qui dirige la demi-tangente “sortante” au noeud 0 (point
) du chemin p. - dir(p,1,0) est le vecteur unitaire
qui dirige la bissectrice de l'angle
défini par les demi-tangentes “entrante” et “sortante” au noeud 1 (point
) du chemin p. - dir(p,2,0) est le vecteur unitaire
qui dirige la demi-tangente “entrante” au noeud 2 (point
) du chemin p.
/*---------------------------------------------*/ size(4cm,0); pair O=(0,0), A=(-1,3), B=(0,1.5), C=(2,2); path p=A{dir(-80)} ..{dir(-80)}B{dir(10)} ..C{dir(-10)}; pair T0=dir(p,0,0); pair T1=dir(p,1,0); pair T2=dir(p,2,0); dot("$A_{(0)}$",A,N); dot("$C_{(2)}$",C,N); draw(Label("$\vec{T_0}$", MidPoint, fontsize(10pt)), A--A+T0, .5bp+green, Arrow); draw(Label("$\vec{T_1e}$", EndPoint, fontsize(10pt)), B--B+dir(p,1,-1), .5bp+red, Arrow); draw(Label("$\vec{T_1s}$", EndPoint, fontsize(10pt)), B--B+dir(p,1,1), .5bp+blue, Arrow); draw(Label("$\vec{T_1}$", EndPoint, fontsize(10pt)), B--B+T1, .5bp+green, Arrow); draw(Label("$\vec{T_2}$", MidPoint, fontsize(10pt)), C--C+T2, .5bp+green, Arrow); draw(p); /*---------------------------------------------*/ | ![]() |
|---|
Lorsque le chemin p ne contient qu'un seul point, la valeur retournée est (0,0).
Un nouvel exemple pour résumer les différents cas :
/*---------------------------------------------*/ size(7cm,0); pair O=(0,0); path p=(0,0){dir(0)} ..{dir(45)}(2,2){dir(-15)} ..{dir(-25)}(3,.75){dir(15)} ..{dir(-60)}(4,0); pair T0=dir(p, 0, 0); pair T1e=dir(p, 1, -1); pair T1=dir(p, 1, 0); pair T1s=dir(p, 1, 1); pair T2e=dir(p, 2, -1); pair T2=dir(p, 2, 0); pair T2s=dir(p, 2, 1); pair T3=dir(p, 3, 0); draw(p); draw(Label("dir(p,0,0)", EndPoint, fontsize(10pt)), point(p,0)--point(p,0)+T0, green, Arrow); draw(Label("dir(p,1,-1)", EndPoint, fontsize(10pt)), point(p,1)--point(p,1)+T1e, red, Arrow); draw(Label("dir(p,1,0)", EndPoint, fontsize(10pt)), point(p,1)--point(p,1)+T1, green, Arrow); draw(Label("dir(p,1,1)", EndPoint, fontsize(10pt)), point(p,1)--point(p,1)+T1s, blue, Arrow); draw(Label("dir(p,2,-1)", EndPoint, fontsize(10pt)), point(p,2)--point(p,2)+T2e, red, Arrow); draw(Label("dir(p,2,0)", EndPoint, fontsize(10pt)), point(p,2)--point(p,2)+T2, green, Arrow); draw(Label("dir(p,2,1)", EndPoint, fontsize(10pt)), point(p,2)--point(p,2)+T2s, blue, Arrow); draw(Label("dir(p,3,0)", EndPoint, fontsize(10pt)), point(p,3)--point(p,3)+T3, green, Arrow); /*---------------------------------------------*/ | ![]() |
|---|
Fonction DIR : syntaxe n°3
pair dir(path p, real t);
This returns the direction of the tangent to path p at the point between node floor(t) and floor(t)+1 corresponding to the cubic spline parameter t-floor(t) (see Bezier). If p contains only one point, (0,0) is returned.
/*---------------------------------------------*/ size(7cm,0); pair A=(0,0), B=(3,0), C=(4,-1); dot(A);dot(B);dot(C); path p=A{dir(-30)}..{dir(-80)}B{dir(20)}..{dir(-45)}C; draw(p); for (real t=0; t <= 2; t += .2) { draw(Label(format("%f",t), EndPoint, fontsize(8pt)), point(p,t)--point(p,t)+dir(p,t), .8bp+red, Arrow); } /*---------------------------------------------*/ | ![]() |
|---|
Important ! Dans la révision 3190, de la version SVN en date du 25/06/08 est intervenue une modification de cette syntaxe. Sur les prochaines versions (à partir de la probable 1.44), on aura la syntaxe :
pair dir(path p, real t, int sign=0);
- lorsque sign<0, cela retournera (et je traduirai plus tard) : the direction of the incoming tangent to path p at the point between node floor(t) and floor(t)+1 corresponding to the cubic spline parameter t-floor(t) (Bézier).
- lorsque sign>0, cela retournera (et je traduirai plus tard) : the direction of the outgoing tangent to path p at the point between node floor(t) and floor(t)+1 corresponding to the cubic spline parameter t-floor(t) (Bézier).
- lorsque sign=0, cela retournera la moyenne des deux directions précédentes.
- Lorsque p sera restreint à un point, (0,0) sera retourné.
Fonction DIR : syntaxe n°4 (non présente dans la documentation)
pair dir(path p);
est l'équivalent de
dir(p,length(p));
et retourne la direction de la demi-tangente *à la fin* du chemin “p”
/*---------------------------------------------*/ size(4cm,0); pair A=(0,3), B=(1,1.5), C=(2,2); path p=A{dir(-80)} ..{dir(-80)}B{dir(10)} ..C{dir(-30)}; draw(Label("$\vec{T}$", MidPoint, fontsize(10pt)), C--C+dir(p), .8bp+green, Arrow); draw(p); /*---------------------------------------------*/ | ![]() |
|---|
Fonction DIR : syntaxe n°5 (non présente dans la documentation)
pair dir(path g, path h);
est l'équivalent de
0.5*(dir(g)+dir(h));
et retourne la demi-somme des directions des demi-tangentes.
/*---------------------------------------------*/ size(4cm,0); pair F=(3,3); path p1=(0,0)..(2,1)..F; path p2=(0,3)..(2,2.5)..F; draw(p1); draw(p2); draw(F--F+dir(p1), .8bp+red, Arrow); draw(F--F+dir(p2), .8bp+blue, Arrow); draw(Label("$\vec{T}$", MidPoint, fontsize(10pt)), F--F+dir(p1,p2), 1bp+green, Arrow); /*---------------------------------------------*/ | ![]() |
|---|
Fonction DIR : de type triple
Fonction DIR : syntaxe n°6
triple dir(real colatitude, real longitude)
returns a unit triple in the direction (colatitude,longitude) measured in degrees.







