Page 1 sur 2

[geometry] grille dans un repere quelconque

Posté : lun. 5 mars 2012, 00:46
par maurice
Bonsoir, je souhaitais faire une grille dans un repère quelconque pour x variant de -5 à 5 ainsi que y, et j'ai pensé à l'extension geometry mais :

Figure asymptote 070344ab27f9407546124b24ba140c86
*** 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
  1. size(12cm);
  2. import geometry;
  3.  
  4. currentcoordsys=cartesiansystem((0,0),i=(1,0),j=(0.5,1.1));
  5. show(currentcoordsys, linewidth(1pt), Arrow);
  6.  
  7. for(int i=-5; i<6; ++i) {
  8. line l=line((-5,i), (5,i));
  9. draw(l, paleblue);
  10. }
  11. for(int i=-5; i<6; ++i) {
  12. line l=line((i, -5), (i, 5));
  13. draw(l, paleblue);
  14. }
  15. point A=(1,4);
  16. dot("$A$", A, NE);


La gille n'est pas complète.
Du coup j'ai pensé arranger le coup avec :

Code : Tout sélectionner

point mini=(-5,-5);
point maxi=(5,5);
dot(mini, invisible);
dot(maxi, invisible);


mais ...

Figure asymptote 64ebe62952e0f19513962adf3b80502e
*** 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
  1. size(12cm);
  2. import geometry;
  3.  
  4. currentcoordsys=cartesiansystem((0,0),i=(1,0),j=(0.5,1.1));
  5. show(currentcoordsys, linewidth(1pt), Arrow);
  6.  
  7. for(int i=-5; i<6; ++i) {
  8. line l=line((-5,i), (5,i));
  9. draw(l, paleblue);
  10. }
  11. for(int i=-5; i<6; ++i) {
  12. line l=line((i, -5), (i, 5));
  13. draw(l, paleblue);
  14. }
  15.  
  16.  
  17.  
  18. point A=(1,4);
  19. dot("$A$", A, NE);
  20.  
  21. point mini=(-5,-5);
  22. point maxi=(5,5);
  23. dot(mini, invisible);
  24. dot(maxi, invisible);


Qu'en pensez-vous ?

Maurice

Re: [geometry] grille dans un repere quelconque

Posté : lun. 5 mars 2012, 15:15
par GM
Bonjour,
quel genre de quadrillage souhaites-tu ?
Tu souhaites "remplir un rectangle"... ou tu veux ce genre de chose, en forme de parallélogramme ?

Figure asymptote 3720c199b77e5cce1519468ddbc82664
*** 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
  1. size(12cm);
  2. import geometry;
  3. currentcoordsys=cartesiansystem((0,0),i=(1,0),j=(0.5,1.1));
  4. int xmin=-5, xmax=6, ymin=xmin, ymax=xmax;
  5. for(int i=ymin; i<ymax+1; ++i) draw(segment((xmin,i),(xmax,i)), paleblue);
  6. for(int i=xmin; i<xmax+1; ++i) draw(segment((i,ymin),(i,ymax)), paleblue);
  7. show(currentcoordsys, linewidth(1pt), Arrow);

Re: [geometry] grille dans un repere quelconque

Posté : lun. 5 mars 2012, 17:24
par GM
... et si ta préférence va au premier type de quadrillage cas que j'évoquais, j'ai songé à ce genre de chose :

Figure asymptote 92f6c6a2c302064bbc099cc590ea551c
*** 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
  1. size(12cm);
  2. import geometry;
  3. currentcoordsys=cartesiansystem((0,0),i=(1,0),j=(0.5,1.1));
  4. coordsys Rc = currentcoordsys;
  5. int xmin=-8, xmax=6, ymin=-4, ymax=4;
  6. for(int i=ymin; i<ymax+1; ++i) draw(segment((xmin,i),(xmax,i)), paleblue);
  7. for(int i=xmin; i<xmax+1; ++i) draw(segment((i,ymin),(i,ymax)), paleblue);
  8. show(Rc, linewidth(1pt), Arrow);
  9. clip(box(Rc*(xmin,ymax),Rc*(xmax,ymin)));

Re: [geometry] grille dans un repere quelconque

Posté : mar. 6 mars 2012, 01:50
par maurice
GM a écrit :Bonjour,
quel genre de quadrillage souhaites-tu ?
Tu souhaites "remplir un rectangle"... ou tu veux ce genre de chose, en forme de parallélogramme ?


Exactement, merci, il va falloir un jour que je me mette à la lecture de la doc de geometry !

bonne soirée

Maurice

Edit : il n'y a pas de flèches au bout des axes malgré le Arrow. Peut-on les faire apparaître ?

Re: [geometry] grille dans un repere quelconque

Posté : mar. 6 mars 2012, 09:24
par GM
maurice a écrit :Edit : il n'y a pas de flèches au bout des axes malgré le Arrow. Peut-on les faire apparaître ?

Remarque préalable : j'ai failli ne pas voir ce que tu avais ajouté... car j'avais déjà lu le message avant sa modification. Dans un tel cas, il vaut mieux poster à la suite.

Sinon pour ta question, remplace :

Code : Tout sélectionner

show(Rc, linewidth(1pt), Arrow);

par :

Code : Tout sélectionner

show(Rc, linewidth(1pt), Arrow(SimpleHead));

et tu verras à quoi les flèches correspondent...

... mais ajouter Arrow est apparemment inutile : il y a une valeur par défaut.

----------------------------------

Plutôt que Arrow, il peut être intéressant de mettre Arrow(), si tu as redéfini avant le style par défaut des flèches.

Code : Tout sélectionner

DefaultHead=HookHead; 
show(Rc, linewidth(1pt), Arrow());

Arrow n'est pas suffisant dans un tel cas.

----------------------------------

Pour les flèches qui te préoccupent... du point de vue des mathématiques... il me semble que Philippe a adopté la bonne convention : comme lui, dans un repère où j'indique le repère (O;\vec{\imath},\vec{\jmath})... je ne mets pas de flèches au bout des axes.

Je mets des flèches au bout des axes... pour un repère où je gradue les axes... mais c'est pour représenter des courbes de fonction dans un repère qui est alors au moins orthogonal et j'utilise alors graph_pi.

Re: [geometry] grille dans un repere quelconque

Posté : mar. 6 mars 2012, 14:57
par maurice
GM a écrit :
Pour les flèches qui te préoccupent... du point de vue des mathématiques... il me semble que Philippe a adopté la bonne convention : comme lui, dans un repère où j'indique le repère (O;\vec{\imath},\vec{\jmath})... je ne mets pas de flèches au bout des axes.

Je mets des flèches au bout des axes... pour un repère où je gradue les axes... mais c'est pour représenter des courbes de fonction dans un repère qui est alors au moins orthogonal et j'utilise alors graph_pi.


Tout à fait d'accord, c'était juste par curiosité, et une remarque, l'ajout de l'argument Arrow n'avait pas d'effet.

maurice

Re: [geometry] grille dans un repere quelconque

Posté : mar. 6 mars 2012, 15:13
par GM
maurice a écrit :l'ajout de l'argument Arrow n'avait pas d'effet.

On pourra imaginer que Philippe avait créé de nombreux d'exemples avant de décider de mettre une valeur par défaut pour l'argument arrow :

Code : Tout sélectionner

void show(picture pic=<default>,
                         Label lo=<default>,
                         Label li=<default>,
                         Label lj=<default>,
                         coordsys R,
                         pen dotpen=<default>,
                         pen xpen=<default>,
                         pen ypen=<default>,
                         pen ipen=<default>,
                         pen jpen=<default>,
                         bool arrow(picture, path, pen, marginT(path, pen))=<default>
                         );


Amélioration de l'index en projet : avoir les valeurs par défaut plutôt qu'il soit écrit <default>.

Mais je réalise que c'est une fonction de géométry.asy donc il vaut mieux regarder l'index de Philippe.

Re: [geometry] grille dans un repere quelconque

Posté : mer. 7 mars 2012, 10:30
par GM
GM a écrit :Amélioration de l'index en projet : avoir les valeurs par défaut plutôt qu'il soit écrit <default>.

En attendant... ajout d'une possibilité : celle de donner des liens filtrants :

Exemple, pour la commande show : http://gmaths.net/asy/index/?filtre=show

Autre exemple, avec la recherche de deux mots : http://gmaths.net/asy/index/?filtre=arc triple

-----------

Quand j'aurai réussi à régler un problème bizarre de conflit et/ou d'instabilité avec l'url-rewriting... j'envisage de rendre superflu d'écrire ?filtre= dans les liens précédents.

Re: [geometry] grille dans un repere quelconque

Posté : ven. 12 oct. 2012, 01:16
par maurice
Bonsoir je relance le sujet car j'ai un problème en utilisant le code proposé quelques messages avant :

Figure asymptote 52419beb05b4e6c41b308bd992eb0cd5
*** 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
  1. unitsize(0.45cm);
  2. usepackage("esvect");
  3. import geometry;
  4.  
  5. currentcoordsys=cartesiansystem((0,0),i=(1/2,-sqrt(3)/2),j=(1/2,sqrt(3)/2));
  6. coordsys Rc = currentcoordsys;
  7. int xmin=0, xmax=8, ymin=xmin, ymax=xmax;
  8. for(int i=ymin; i<ymax+1; ++i) draw(segment((xmin,i),(xmax,i)), paleblue);
  9. for(int i=xmin; i<xmax+1; ++i) draw(segment((i,ymin),(i,ymax)), paleblue);
  10. show(Rc, linewidth(1pt), Arrow);
  11.  
  12. // draw(segment((3,0),(6,0)), red, Arrow);
  13. // draw(segment((3,0),(3,4)), red, Arrow);
  14.  
  15. // clip(box(Rc*(xmin,ymax),Rc*(xmax,ymin)));


mais si la dernière ligne est décommentée, j'obtiens alors un .eps tout blanc !

où est l'erreur ?

merci maurice

Re: [geometry] grille dans un repere quelconque

Posté : ven. 12 oct. 2012, 06:57
par GM
Bonjour,

maurice a écrit :mais si la dernière ligne est décommentée, j'obtiens alors un .eps tout blanc !
où est l'erreur ?


Rajoute

Code : Tout sélectionner

write(box(Rc*(xmin,ymax),Rc*(xmax,ymin)));

et tu vas comprendre pourquoi.

Si tu veux que cette dernière ligne fonctionne dans tous les cas, il va falloir réfléchir aux calculs nécessaires des deux pairs attendus par box.

Code : Tout sélectionner

clip(box( .... , .... ));


Pour dépanner cet exemple précis, remplace la dernière ligne par :

Code : Tout sélectionner

clip(box(Rc*(xmax+2,ymin),Rc*(xmin-2,ymax)));

... et tu devrais comprendre l'incidence du +2 et -2 que j'ai ajoutés, pour pouvoir modifier l'exemple particulier que tu donnes, précisément comme tu le souhaites.