Utiliser crop() dans une routine

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 !
Viserion
Messages : 20
Enregistré le : mar. 24 mars 2020, 20:00

Utiliser crop() dans une routine

Message non lu par Viserion » jeu. 2 déc. 2021, 23:13

Bonsoir Gaëtan,
Dans le code ci-dessous (merci pour les scripts !), est-il possible de "rogner" les tangentes à la zone du graphique ?
Merci.
Fabrice

Code : Tout sélectionner

import graph;
import interpolate;
import geometry;

usepackage("esvect");

unitsize(1.5cm,1.5cm);

defaultpen(fontsize(9pt)); 
real n=4;

real[] x={-4,-3,0,2,4}; 
real[] y={1,3,-1,0,4}; 
real[] dy={4,0,-1,3/2,5/2};

add(shift(-5,-2)*grid(10,8,gray(0.8)));

real f(real t)
{ return pwhermite(x,y,dy)(t);
}
path Cf=graph(f,-4,4,n=4000);

draw(Cf,black+1bp);

void tangente(int k,real lg=1,real ld=lg, pen p=dashed, arrowbar arr=None) {
  draw(((x[k],y[k])-lg*unit((1,dy[k])))
       --((x[k],y[k])+ld*unit((1,dy[k]))),
       p,
       arr);
}


xlimits(-5,5);
ylimits(-2,6,Crop);

pen thin=linewidth(0.5*linewidth());


xaxis(Label("$x$",align=Align),axis=YZero,RightTicks(begin=false,end=false,extend=false,ptick=thin,NoZero,Step=1,beginlabel=false,endlabel=false,Size=1mm),p=linewidth(1bp),above=true);
yaxis(Label("$y$",align=Align),axis=XZero,RightTicks(begin=false,end=false,extend=false,ptick=thin,NoZero,Step=1,beginlabel=false,endlabel=false,Size=1mm),p=linewidth(1bp),above=true);

draw((0,0)--(1,0),red+1bp,Arrow(5bp));
draw((0,0)--(0,1),red+1bp,Arrow(5bp));

tangente(0,lg=2,ld=5,p=1bp+blue);
tangente(1,lg=1,ld=2,p=1bp+blue);
tangente(2,lg=3,ld=1,p=1bp+blue);
tangente(4,lg=6.4,ld=1,p=1bp+blue);

for(int i=0; i <= 2; ++i)
  dot((x[i],y[i]),3bp+black);

dot((x[4],y[4]),3bp+black);

label("$D$",(4,f(4)),NW);
label("$C$",(0,f(0)),NE);
label("$B$",(-3,f(-3)),N);
label("$A$",(-4,f(-4)),NW);
label("$O$",(0,0),SW);
label("$\vv{i}$",(0.5,0),red,align=S);
label("$\vv{j}$",(0,0.5),red,align=W);

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

Re: Utiliser crop() dans une routine

Message non lu par GM » jeu. 2 déc. 2021, 23:56

Bonsoir Fabrice,
je ne suis pas sûr de comprendre l'intention derrière la demande.

Est-ce que je comprends que tu voudrais inventer une fonction tangente où tu n'aurais pas à choisir manuellement lg et lg et que chaque tangente aille de bord à bord ?

Dans ce cas, utilise line !

Code : Tout sélectionner

void tangente2(int k, pen p=dashed, arrowbar arr=None) {
  draw(line((x[k],y[k])-unit((1,dy[k])),
            ((x[k],y[k])+unit((1,dy[k])))),
       p,
       arr);
}

Code : Tout sélectionner

tangente2(0,p=1bp+blue,Arrows);
Mais peut-être que je n'ai pas compris la demande.
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.69)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.66-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.66-? git) + TexLive2018
Merci de préciser la votre !

Viserion
Messages : 20
Enregistré le : mar. 24 mars 2020, 20:00

Re: Utiliser crop() dans une routine

Message non lu par Viserion » ven. 3 déc. 2021, 19:05

Bonsoir Gaëtan,
Tu as très bien compris ce que je cherche à faire !
Merci.
Fabrice

Répondre