Récupérer les arguments de size

Tout ce qui concerne le langage Asymptote. Ce langage est supporté sur le forum via les balises asy.

Modérateur : gdm_asy

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

[Résolu] Récupérer les arguments de size

Message par chellier »

Bonjour,
Voila mon problème, je voudrais tracer un segment de taille invariable, c'est à dire qui ne dépende pas des arguments de size, à la manière des graduations des axes.
J'ai bien trouvé une variable Ticksize, mais en dehors de certaines fonctions, ça ne va pas...
J'ai aussi essayé des choses comme pic.trucbidule (mais surement pas avec le bon trucbidule) pour essayer de récupérer les arguments de size.
Mais sans succès non plus....

Christophe
Dernière modification par chellier le mardi 16 février 2010, 15:17, modifié 1 fois.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Récupérer les arguments de size

Message par GMaths »

Ne te suffit-il pas d'utiliser unitsize au lieu de size ? :roll:

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Récupérer les arguments de size

Message par GMaths »

GMaths a écrit :Ne te suffit-il pas d'utiliser unitsize au lieu de size ? :roll:
Je pensais à "travailler" avec un unitsize pour toute la figure...

... mais sinon, je te propose cela aussi :

Code : Tout sélectionner

size(6cm);
draw(unitsquare);

picture pic; unitsize(pic,1cm);
draw(pic,(0,1)--(5,1),red);
add(pic.fit());
Tu peux changer le size(6cm); en size(10cm); et tu devrais constater que le trait rouge va garder sa longueur de 5x1cm.

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: [Asymptote] Récupérer les arguments de size

Message par chellier »

Avec unitsize(1cm), j'obtiens par exemple ce type de figure :
Image

je réduis les borne et utilise size(6cm) :
Image

j'applique un coef et j'obtiens ce que je veux :
Image

Si je réduis les bornes avec unitsize, je ne vois rien.
Avec le coef, je m'en sort, c'était juste pour savoir si je pouvais faire autrement...

Christophe

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: [Asymptote] Récupérer les arguments de size

Message par chellier »

Oups, pas vu ton message GMaths, je teste dès que je peux

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Récupérer les arguments de size

Message par GMaths »

chellier a écrit :Si je réduis les bornes avec unitsize, je ne vois rien.
Avec le coef, je m'en sors, c'était juste pour savoir si je pouvais faire autrement...
Dans ta définition de sol2onaxis, tu as :

Code : Tout sélectionner

real xMin=min(sol1,sol2)-2.5, real xMax=max(sol1,sol2)+2.5,
avec tes 2.5 qui ne tiennent pas compte de la différence (sol2-sol1), tu auras forcément des problèmes si sol1 et sol2 sont proches et d'autant plus si tu utilises size.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Récupérer les arguments de size

Message par GMaths »

Peut-être une source d'inspiration pour tes problèmes de taille : tu pourras constater que tu peux changer la ligne

Code : Tout sélectionner

point A=(8,37),B=(10,57.5);
par la ligne

Code : Tout sélectionner

point A=(8,37),B=(8.2,57.5);
et la figure va garder sa lisibilité.

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [Asymptote] Récupérer les arguments de size

Message par OG »

Bonjour

Intéressant tout cela. Dans un fil Asymptote qui n'a rien à voir (pour ne pas proposer une solution asymptote
dans un fil Tikz), j'avais copié arrow pour faire une délimitation d'intervalle.
Je n'ai pas vérifié mais cela doit se comporter comme la graduation des axes.
C'était ici
viewtopic.php?p=97605#p97605

Cela pourra peut-être t'inspirer ?

O.G.

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: [Asymptote] Récupérer les arguments de size

Message par chellier »

@ GMaths : Bon, j'ai essayé tout ça, mais en voulant garder l'option de choisir les abscisses mini et maxi (pour pouvoir rajouter des choses sur l'axe), je n'arrive pas vraiment à ce que je veux.
Je crois que je vais m'en tenir pour l'instant au coefficient, ce qui me paraît le plus souple...

En tous les cas, merci pour l'aide ! :D

Christophe

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: [Asymptote] Récupérer les arguments de size

Message par chellier »

@ OG : J'essaye de comprendre l'exemple, mais va me falloir un peu de temps... :oops:

Christophe

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Récupérer les arguments de size

Message par GMaths »

chellier a écrit :@ GMaths : Bon, j'ai essayé tout ça, mais en voulant garder l'option de choisir les abscisses mini et maxi (pour pouvoir rajouter des choses sur l'axe), je n'arrive pas vraiment à ce que je veux.
Tu n'as pas dû tout essayer. Tu peux changer la valeur de sol2 dans l'exemple qui suit... et tu verras que la figure est satisfaisante.

Code : Tout sélectionner

size(5cm,3cm,false);

real sol1=0, sol2=2.3;

real dx=1.5*(sol2-sol1);
pair ptX1=(sol1-dx,0),
     ptX2=(sol2+dx,0);

draw(ptX1--ptX2,.7bp+black);
dot("sol1",(sol1,0),S,2bp+red);
dot("sol2",(sol2,0),S,2bp+red);


__________________________

Dans ton code, mets par défaut, si sol1<sol2, quelque chose du genre :
xmin=sol1-1.5*(sol2-sol1)
xmax=sol2+1.5*(sol2-sol1)
... et cela devrait aller.

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: [Asymptote] Récupérer les arguments de size

Message par chellier »

Oui, tant qu'on reste sur l'axe des abscisses... Mon problème est la taille du crochet (en particulier suivant les ordonnées). Je voudrais que cette taille, ne dépende pas d'unitsize ou de size. Et surtout, je veux pouvoir rentrer les abscisses mini et maxi en argument dans la fonction, pour pouvoir, par exemple, avoir un axe plus grand sur lequel placer d'autres choses.

Sinon, j'obtiens ça avec xMin=sol1-1.5*(sol2-sol1) et xMax=sol2+1.5*(sol2-sol1)
Image

Je ne suis peut-être pas très clair sur ce que je veux, je suis désolé, merci en tous cas de te pencher sur mon problème :)
La solution d'OG à l'air de faire ce que je veux, il me reste à comprendre le code...

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Récupérer les arguments de size

Message par GMaths »

chellier a écrit :Mon problème est la taille du crochet (en particulier suivant les ordonnées).
Il faut évidemment revoir ta façon de définir la taille des crochets.

Si, par exemple, tu définis :

Code : Tout sélectionner

real d=abs(sol2-sol1);
tes différentes longueurs doivent être proportionnelles à d.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Récupérer les arguments de size

Message par GMaths »

Exemple : avec le code suivant :

Code : Tout sélectionner

size(7cm,0);

real sol1=0, 
     sol2=3, 
     xmi=min(sol1,sol2),
     xma=max(sol1,sol2),
     d=abs(sol2-sol1); // distance entre les deux solutions

real m=1.5d, // distance avant la première solution et après la seconde
     hcro=.4*d, // hauteur crochet / 2
     lcro=.1*d; // largeur crochet
     
draw((xmi-m,0)--(xma+m,0),red);

draw((xmi-lcro,hcro)--(xmi,hcro)--(xmi,-hcro)--(xmi-lcro,-hcro),blue);
draw((xma+lcro,hcro)--(xma,hcro)--(xma,-hcro)--(xma+lcro,-hcro),green);

label(format("%f",xmi),(xmi,hcro),N);
label(format("%f",xma),(xma,hcro),N);

shipout(bbox(1mm,invisible));
tu vas obtenir ceci :
2010-02-15_203503.png
et tu peux changer les valeurs de sol1 et sol2, cela va toujours garder les proportions choisies.

PS : j'ai gardé tes notations sol1, sol2... mais si je devais l'écrire moi-même, je choisirais plutôt : val1 et val2 (val pour valeur qui me semble un mot plus adapté).
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: [Asymptote] Récupérer les arguments de size

Message par chellier »

Merci, ces exemples sont très intéressants, mais je suis un pénible :twisted: :
La taille du crochet dépend encore de deux paramètres : sol1 et sol 2. Si je change size(7cm,0) en unitsize(1cm), la taille du crochet change. Or j'aimerais qu'elle ne dépende d'aucun paramètre (notamment pour ma fonction solonaxis() avec un seul crochet, pour ceux qui ne suivent pas c'est ). C'est bien ce qui se passe pour les graduations ou pour les flèches...
Je pensais qu'il y avait une solution "simple", ce n'est apparemment pas le cas :shock:

PS: Dans l'esprit de ce que j'ai fait, l'intervalle [a;b] est l'ensemble des réels x solutions des deux inégalités : x≥a et x≤b.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Récupérer les arguments de size

Message par GMaths »

J'ai mis un exemple en ligne de ce que propose O.G. : lien mort

Un exemple d'application ici : lien mort

Comme il le disait dans l'autre sujet, il s'agirait d'ajouter la possibilité de tourner les crochets et donc de revoir probablement les appellations.




PS : Olivier, je modifie le fichier OG.asy donné en lien... à ta demande, comme tu voudras.
Dernière modification par GMaths le jeudi 26 août 2010, 09:24, modifié 1 fois.

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [Asymptote] Récupérer les arguments de size

Message par OG »

J'étais en train de regarder les codes et j'allais écrire
@Gaëtan : qu'attends-tu pour le deferred drawing ?

Pour le code proposé, pas de pb tu fais ce que tu veux. De toute façon
je m'étais borné à copier les définitions d'Arrow.

O.G.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Récupérer les arguments de size

Message par GMaths »

OG a écrit :@Gaëtan : qu'attends-tu pour le deferred drawing ?
D'avoir du temps (une journée à rien faire - car pour l'instant, je me contente de choses qui me prennent 5 minutes pendant mes pauses de bricolage ou de copies) et d'en comprendre toutes les subtilités. :lol:

Et puis, je ne cesse d'en faire... dès lors où je mets une figure avec size(...), il y en a... si j'ai bien compris ! :mrgreen:

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: [Asymptote] Récupérer les arguments de size

Message par chellier »

Très bien très bien tout ça ! :)
Il y a juste un inconvénient, c'est que le crochet se trouve sur un path.
J'ai essayé de bricoler ça :

Code : Tout sélectionner

void bracket(picture pic, pair a, pair d, real s,pen p=currentpen)
{
  picture opic;
  pair ortd=s*(-d.y,d.x);
  Draw(opic,(ortd-.5d)--(-0.5d)--0.5d--(.5d+ortd),p+solid);
  add(pic,opic,a);
}

arrowbar lBra(real size=0, real ratiob=.3)
{
  return new bool(picture pic, path g, pen p, margin margin) {
    real size=size == 0 ? barsize(p) : size;
    bracket(pic,point(g,0),size*dir(g,0)*I,ratiob,p);
    return true;
  };
}
arrowbar rBra(real size=0, real ratiob=.3)
{
  return new bool(picture pic, path g, pen p, margin margin) {
    real size=size == 0 ? barsize(p) : size;
    bracket(pic,point(g,0),size*dir(g,0)*I,-ratiob,p);
    return true;
  };
}
arrowbar lBra=lBra();
arrowbar rBra=rBra();

import graph;

size(5cm,0);

xlimits(min=-3,max=4);
xaxis(Label("$x$",align=N),Ticks(),Arrow);
draw((0,0)--(.00001,0),bp+blue,lBra);
draw((1,0)--(1.00001,0),bp+darkgreen,rBra);

shipout(bbox(5mm,invisible));
Par contre, j'ai plus les graduations :shock:

Sinon, je suis tombé là-dessus. Mais j'ai mal à la tête... Je crois que je vais profiter un peu de mes vacances maintenant :D

Christophe

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Récupérer les arguments de size

Message par GMaths »

chellier a écrit :Il y a juste un inconvénient, c'est que le crochet se trouve sur un path.
:shock: :shock:
C'est justement l'avantage !! tracer des path/segments correspondant aux intervalles de solutions.

Et, puis en revoyant ce que proposait Olivier initialement, on peut gérer la couleur des crochets et tu peux mettre le chemin en couleur "invisible" si tu préfères.