Droites graduées

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Droites graduées

Messagepar MB » Jeudi 20 Mars 2008, 19:54

Bonjour,

voici un code Asymptote qui m'a permis de tester les changements de repères du module geometry_dev de Ph. Ivaldi.

Code: Tout sélectionner
unitsize(1cm);
import geometry_dev;
linemargin = -5mm;

real a = 20;
currentcoordsys = cartesiansystem((0,0), i = (1,0), j = rotate(a,(0,0))*(1,0));

int n_1_min = -1;
int n_1_max = 6;
int n_2_min = -1;
int n_2_max = 7;

pair pO = (0,0);
label("$O$",pO,S);

line d_1 = line(pO,(1,0));
line d_2 = line(pO,(0,1));
draw(d_1^^d_2);

for (int i=n_1_min; i <= n_1_max; ++i)
  {
   dot(locate(( i,0)));
  }
 
 
for (int i=n_2_min; i <= n_2_max; ++i)
  {
   dot(locate((0, i)));
  }

point pA = (2,0);
point pB = (3,0);
point pM = (0,4);
point pN = (0,6);

dot("$A$",pA,SE);
dot("$B$",pB,SE);
dot("$M$",pM,NW);
dot("$N$",pN,NW);

shipout(bbox(xmargin = 1mm,invisible));


Il est à noter que dot(locate(pair)) doit être utilisé pour travailler dans le repère courant modifiés car sinon dot(pair) travaille dans le repère Asymptote de base.

A part ça, je pense que le code n'est pas optimal et qu'il existe peut être un moyen plus simple pour tracer des droites graduées (sinon ça serait pas mal une commande pour ça non ?). En tout cas, j'ai le problème suivant : le linemargin = -5mm qui me permet de prolonger les droites fait qu'il manque une graduation sur l'une des deux droites. Voici la figure obtenue par exemple avec le code ci-dessus :

droites_graduées.png
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6891
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: [Asymptote] Droites graduées

Messagepar OG » Jeudi 20 Mars 2008, 21:32

bonsoir

pour le pb du linemargin, je ne sais pas d'autant plus qu'ajouter un point fait que ça déséquilibre l'autre graduation.
Pour faire autrement les points on peut jouer avec sequence :

Code: Tout sélectionner
point f(int i){return locate((0,i));};
point[] g=sequence(f,3);
dot(g);


Cordialement
O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: [Asymptote] Droites graduées

Messagepar MB » Jeudi 20 Mars 2008, 21:47

OG a écrit:pour le pb du linemargin, je ne sais pas d'autant plus qu'ajouter un point fait que ça déséquilibre l'autre graduation.


Exactement.

OG a écrit:Pour faire autrement les points on peut jouer avec sequence


Je vais regarder ça, je ne connaissais pas cette commande. :wink:
Merci.
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6891
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar OG » Vendredi 21 Mars 2008, 08:17

Bonjour

Fondamentalement la commande sequence est un raccourci pour une boucle et la création de tableaux. Depuis la version 1.20 (à peu près le moment où j'ai commencé Asymptote) il y a eu beaucoup de nouvelles choses et concernant les tableaux il y a eu récemment des ajouts à la Python pour extraire par A[2:5] directement les éléments dont on devine les indices.

bonne journée,
O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: [Asymptote] Droites graduées

Messagepar MB » Vendredi 21 Mars 2008, 10:00

Ca doit pouvoir simplifier le code. Par contre, j'ai des problèmes si je veux utiliser des valeurs négatives. Par exemple :

Code: Tout sélectionner
point fdots_1(int i) {return locate((i,0));};
point[] dots_1 = map(fdots_1,sequence(n_1_min,n_1_max));


J'ai pas eu trop le temps de regarder en détails, mais je me disais qu'il devait falloir utiliser la commande map pour s'en sortir.
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6891
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar OG » Vendredi 21 Mars 2008, 11:08

MB a écrit:Ca doit pouvoir simplifier le code. Par contre, j'ai des problèmes si je veux utiliser des valeurs négatives. Par exemple :

Code: Tout sélectionner
point fdots_1(int i) {return locate((i,0));};
point[] dots_1 = map(fdots_1,sequence(n_1_min,n_1_max));


J'ai pas eu trop le temps de regarder en détails, mais je me disais qu'il devait falloir utiliser la commande map pour s'en sortir.


Il y avait une discussion sur le forum Asymptote, car map ne fonctionne pas (pour la personne qui avait posté le message) comme on peut l'attendre, chez moi ton code donne une erreur, négatif ou positif...

La solution est de définir le map à ta sauce qui gère le type dont tu as besoin.

Ce qui est dommage c'est que sequence(-3,4) fonctionne mais qu'il n'y a pas que sequence(f,-3,6). Cependant avec un tableau intermédiaire (pas très élégant) ça doit pouvoir se faire, ou alors tu translates.. et tu créés une nouvelle fonction.

Cordialement
O.G.
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: [Asymptote] Droites graduées

Messagepar MB » Vendredi 21 Mars 2008, 20:12

OG a écrit:Il y avait une discussion sur le forum Asymptote, car map ne fonctionne pas (pour la personne qui avait posté le message) comme on peut l'attendre, chez moi ton code donne une erreur, négatif ou positif...


En effet, ça ne fonctionne pas comme je le pensais (mais en même temps j'avais pas trop le temps d'approfondir la chose ce matin).

OG a écrit:Ce qui est dommage c'est que sequence(-3,4) fonctionne mais qu'il n'y a pas que sequence(f,-3,6).


Oui, c'est en effet ce que je voulais utiliser dans ce cas. :|

Bon, je vais regarder ça en tout cas.
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6891
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar GMaths » Dimanche 23 Mars 2008, 10:25

MB a écrit:A part ça, je pense que le code n'est pas optimal et qu'il existe peut être un moyen plus simple pour tracer des droites graduées (sinon ça serait pas mal une commande pour ça non ?). En tout cas, j'ai le problème suivant : le linemargin = -5mm qui me permet de prolonger les droites fait qu'il manque une graduation sur l'une des deux droites.


Personnellement, je n'utilise plus de linemargin négatif. J'aurais tendance à utiliser un addMargins(5mm,5mm);
et un linemargin positif pour décoller les droites du bord... et le bbox est alors aussi inutile.

Cf. Figure 0011: db04_090308_droites.asy : http://marris.org/asymptote/Lignes/index.html
Dernière édition par GMaths le Dimanche 23 Mars 2008, 11:46, édité 1 fois.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar GMaths » Dimanche 23 Mars 2008, 10:29

addMargins n'était pas encore dans la doc papier, il y a quelques temps... mais voilà :

Syntaxe de addMargins
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar MB » Dimanche 23 Mars 2008, 11:16

Oui, je connais et j'utilise addMargins.
Par contre, je trouve que le linemargin a également son intérêt dans quelques cas. Les deux méthodes se valent sur ce coup là je trouve.
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6891
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar MB » Dimanche 23 Mars 2008, 11:25

Sinon, pour la fonction map, elle est définie dans la documentation par :

Code: Tout sélectionner
T[] map(T f(T), T[] a)


Après avoir cherché un peu sur le forum Asymptote (ici) il semblerait que la fonction doit prendre le même type en entrée et en sortie.
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6891
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar GMaths » Dimanche 23 Mars 2008, 11:26

MB a écrit:Oui, je connais et j'utilise addMargins.
Par contre, je trouve que le linemargin a également son intérêt dans quelques cas. Les deux méthodes ce valent sur ce coup là je trouve.


Si je choisis

Code: Tout sélectionner
addMargins(5mm,0) et linemargin(1mm)


plutôt que

Code: Tout sélectionner
linemargin(-5mm) et bbox(xmargin = 1mm,invisible)


c'est que pour mes galeries, j'aime que cela soit size qui détermine la largeur de l'image...
... sans avoir à tenir compte d'un linemargin négatif qui modifie la taille.
Mais c'est pour la galerie d'exemples que j'ai cette préférence pour qu'il n'y ait pas trop de disparités entre les largeurs d'images... mais sinon...

J'en ai parlé sans avoir testé si ici cela changeait ou pas quelque chose.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar MB » Dimanche 23 Mars 2008, 11:29

GMaths a écrit:j'aime que cela soit size qui détermine la largeur de l'image...
... sans avoir à tenir compte d'un linemargin négatif qui modifie la taille.


Oui, je comprends.
Personnellement, je n'utilise jamais size en fait. :|
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6891
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar GMaths » Dimanche 23 Mars 2008, 11:37

MB a écrit:Oui, je comprends.
Personnellement, je n'utilise jamais size en fait. :|


Je comprends aussi ! :mrgreen:
J'utilise bien sûr aussi unitsize dans mes figures de cours ou devoirs... lorsqu'il faut une unité de longueur précise. :wink:
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar Ph. Ivaldi » Dimanche 23 Mars 2008, 23:48

Bonjour MB,

Désolé de répondre avec du tard mais je suis parfois oublié par le système de notification de nouveaux messages...
Je suis obligé de ne plus le suivre ce forum puis de le suivre à nouveau pour être tenu informé.

MB a écrit:Il est à noter que dot(locate(pair)) doit être utilisé pour travailler dans le repère courant modifiés car sinon dot(pair) travaille dans le repère Asymptote de base.


Il serait peut-être utile que je redéfinisse la routine dot standard pour qu'elle prenne en compte le nouveau repère...
Qu'en penses-tu ?

MB a écrit:A part ça, je pense que le code n'est pas optimal et qu'il existe peut être un moyen plus simple pour tracer des droites graduées (sinon ça serait pas mal une commande pour ça non ?).


Le mieux serait de modifier graph.asy pour qu'il utilise le changement de repère.
Cela ne sera possible qu'avec l'accord de John si geometry_dev intègre Asymptote et sous réserve de faisabilité...
Dans le cas contraire je pourrais ajouter un paramètre ticks à la commande show(...,coordsys), à voir...

MB a écrit:En tout cas, j'ai le problème suivant : le linemargin = -5mm qui me permet de prolonger les droites fait qu'il manque une graduation sur l'une des deux droites.


Je ne vois pas de solution simple :-(
Le mieux, pour le moment, est d'ajouter une boite invisible:

Code: Tout sélectionner
unitsize(1cm);
import geometry_dev;

draw(box((-1.5,-1),(7.1,2.95)), invisible);

real a = 20;
currentcoordsys = cartesiansystem((0,0), i = (1,0), j = rotate(a,(0,0))*(1,0));

int n_1_min = -1;
int n_1_max = 6;
int n_2_min = -1;
int n_2_max = 7;

pair pO = (0,0);
label("$O$",pO,S);

line d_1 = line(pO,(1,0));
line d_2 = line(pO,(0,1));
draw(d_1^^d_2);

for (int i=n_1_min; i <= n_1_max+1; ++i)
  {
    dot(locate(( i,0)));
  }

for (int i=n_2_min; i <= n_2_max; ++i)
  {
    dot(locate((0, i)));
  }

point pA = (2,0);
point pB = (3,0);
point pM = (0,4);
point pN = (0,6);

dot("$A$",pA,SE);
dot("$B$",pB,SE);
dot("$M$",pM,NW);
dot("$N$",pN,NW);

shipout(bbox(xmargin = 1mm,invisible));
Ph. Ivaldi
Méga-utilisateur
 
Messages: 267
Inscription: Vendredi 12 Janvier 2007, 23:27
Statut actuel: Actif et salarié

Re: [Asymptote] Droites graduées

Messagepar MB » Lundi 24 Mars 2008, 00:09

Bonsoir Philippe. :D

Ph. Ivaldi a écrit:Désolé de répondre avec du tard mais je suis parfois oublié par le système de notification de nouveaux messages...
Je suis obligé de ne plus le suivre ce forum puis de le suivre à nouveau pour être tenu informé.


Bon, si je comprends bien tu surveilles le forum LaTeX et tous les nouveaux messages ne te sont pas notifiés.
Je vais faire le test pour voir ce qu'il en est. :|

Ph. Ivaldi a écrit:Il serait peut-être utile que je redéfinisse la routine dot standard pour qu'elle prenne en compte le nouveau repère...
Qu'en penses-tu ?


A priori, si j'ai bien compris, elle prend bien en compte le nouveau repère pour un objet de type point mais pas pour un objet de type pair.
Maintenant, je ne vois pas trop en quoi ça poserait problème de faire en sorte que ça marche aussi pour un objet de type pair ... donc à priori je suis pour. :D

Ph. Ivaldi a écrit:Le mieux serait de modifier graph.asy pour qu'il utilise le changement de repère.
Cela ne sera possible qu'avec l'accord de John si geometry_dev intègre Asymptote et sous réserve de faisabilité...


Oui, d'ailleurs c'est pour bientôt geometry_dev livré avec Asymptote ?

Ph. Ivaldi a écrit:Dans le cas contraire je pourrais ajouter un paramètre ticks à la commande show(...,coordsys), à voir...


Oui, en effet c'est une possibilité.
Maintenant peut être qu'on pourrait avoir à tracer des droites graduées qui ne sont pas les axes d'un repère.
Donc je pensais peut être à un paramètre ticks sur draw(line) (qui permettrait de prendre en compte les linemargin par exemple).

Ph. Ivaldi a écrit:Je ne vois pas de solution simple :-(
Le mieux, pour le moment, est d'ajouter une boite invisible


Bon bah c'est déjà une solution (pas trop compliquée) à laquelle je n'avais pas pensé. :mrgreen:
Merci.
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6891
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: [Asymptote] Droites graduées

Messagepar Ph. Ivaldi » Lundi 24 Mars 2008, 01:38

MB a écrit:Bon, si je comprends bien tu surveilles le forum LaTeX et tous les nouveaux messages ne te sont pas notifiés.

Ça même.
Je fais pourtant l'effort d'aller voir toutes les notifications pour ne pas être "oublié".

MB a écrit:Je vais faire le test pour voir ce qu'il en est. :|


Merci !

MB a écrit:A priori, si j'ai bien compris, elle prend bien en compte le nouveau repère pour un objet de type point mais pas pour un objet de type pair.


Tu as bien compris.

MB a écrit:Maintenant, je ne vois pas trop en quoi ça poserait problème de faire en sorte que ça marche aussi pour un objet de type pair ... donc à priori je suis pour. :D


Ce qui me fait reculer c'est qu'il y a trois routines dot différentes avec comme paramètre un pair. Pour l'une d'elle il faut ensuite distinguer les cas où le paramètre align est de type pair, point ou vector.
Bref, au total, ça fait une bonne poignée de routine a définir...
Ensuite, si je commence avec dot et les pair, il va venir dot et les circle etc etc...

MB a écrit:Oui, d'ailleurs c'est pour bientôt geometry_dev livré avec Asymptote ?


OG et moi sommes encore sur la traduction en Anglais. L'intégration n'a aucune chance de se faire tant que la documentation n'est pas traduite.
J'en profite pour dire que nous acceptons de l'aide pour cette traduction :roll:
Ph. Ivaldi
Méga-utilisateur
 
Messages: 267
Inscription: Vendredi 12 Janvier 2007, 23:27
Statut actuel: Actif et salarié

Re: [Asymptote] Droites graduées

Messagepar MB » Lundi 24 Mars 2008, 01:50

Ph. Ivaldi a écrit:Ensuite, si je commence avec dot et les pair, il va venir dot et les circle etc etc...


Bon, je ne vois pas bien le rapport entre dot et circle mais en tout cas je crois comprendre que cette modification demanderait pas mal de travail. Comme elle n'est pas très importante puisque normalement on travailler avec des objets de type point lorsqu'on utilise geometry_dev, on peut faire l'effort d'utiliser locate lorsque ça n'est pas le cas.

Ph. Ivaldi a écrit:OG et moi sommes encore sur la traduction en Anglais. L'intégration n'a aucune chance de se faire tant que la documentation n'est pas traduite.
J'en profite pour dire que nous acceptons de l'aide pour cette traduction :roll:


Si je trouve un peu de temps, je vais donner un coup de main. :wink:
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6891
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 12 invités