bool3 et valeur interdite

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 !
maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

bool3 et valeur interdite

Message non lu par maurice » mar. 5 juin 2012, 00:37

Bonsoir, pour ne pas poluer le sujet sur l'impression, je lance un nouveau.

Pour le début, voir ici.

GM a écrit :J'ai oublié de dire que :

  • les fonctions choisies ci-dessus n'ont pas de valeurs interdites, donc il suffirait de deux états pour le booléen : un pair qui ne satisfait pas la condition n'est simplement pas tracé... et le premier pair qui suit et qui satisfait la condition débute nécessairement un nouveau guide ;
  • l'intérêt d'un booléen trois états est pour moi dans le tracé de la courbe d'une fonction ayant une valeur interdite, car il faut alors pouvoir écrire une condition de test fonctionnant ainsi :
    • si l'état est true, le pair testé est ajouté au guide courant ;
    • si l'état est default, le pair testé est le premier pair d'un nouveau guide qui devient le guide courant ;
    • si l'état est false, le pair testé n'est à ajouter à aucun guide et le prochain pair qui vérifiera la condition débutera un nouveau guide.

J'espère que j'ai été clair. :)


J'ai essayé de représenter la fonction x \mapsto \frac{1}{x}, je n'ai pas eu besoin de l'état default.
Si on remplace true par default, aucune ligne n'estbtracé, ce qui est normal vu la doc sur graph.

Figure asymptote 18dd245adf73e712713227494568c444
*** 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. import graph;
  2. size(300, IgnoreAspect);
  3.  
  4. int xmin=-3, xmax=3, ymin=-3, ymax=3;
  5. real f(real x){return 1/x;}
  6. bool3 cond(real x) {return ((x!=0)&&(f(x)>ymin)&&(f(x)<ymax)) ? true : false;}
  7.  
  8. guide[] Cf=graph(f,xmin,xmax,n=10*(xmax-xmin),cond);
  9. draw(Cf, red, dot());
  10. xaxis(xmin=xmin,xmax=xmax,Ticks(Step=1));
  11. yaxis(ymin=ymin,ymax=ymax,Ticks(Step=1));


Ce n'est donc pas que tu n'as pas été clair mais je tarde à bien comprendre.

bruno
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

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

Re: bool3 et valeur interdite

Message non lu par GM » mar. 5 juin 2012, 05:42

Avec ton exemple, je n'ai fait que changer la valeur de n pour planter le fonctionnement :

Figure asymptote 192b82c5faa4562be500b73dac61f139
*** 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. import graph;
  2. size(300, IgnoreAspect);
  3.  
  4. int xmin=-3, xmax=3, ymin=-3, ymax=3;
  5. real f(real x){return 1/x;}
  6. bool3 cond(real x) {return ((x!=0)&&(f(x)>ymin)&&(f(x)<ymax)) ? true : false;}
  7.  
  8. guide[] Cf=graph(f,xmin,xmax,n=(xmax-xmin)+1,cond);
  9. draw(Cf, red, dot());
  10. xaxis(xmin=xmin,xmax=xmax,Ticks(Step=1));
  11. yaxis(ymin=ymin,ymax=ymax,Ticks(Step=1));


Dans le cas de la fonction inverse... il faut prendre en compte le changement de signe.

Remarque : Quand j'ai écrit
l'intérêt d'un booléen trois états est pour moi dans le tracé de la courbe d'une fonction ayant une valeur interdite, car ...

j'aurais dû écrire 'l'intérêt essentiel" car je ne doute pas que l'on peut inventer d'autres usages.
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 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.66)+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 !

OG
V.I.P.
V.I.P.
Messages : 142
Enregistré le : dim. 7 mars 2010, 22:27

Re: bool3 et valeur interdite

Message non lu par OG » mar. 5 juin 2012, 10:21

Bonjour

Pour la fonction 1/x il y a l'exemple sur le site asymptote, qui comme le dit Gaëtan
tient compte du changement de signe. Mais si j'ai bien compris il y a deux pbs à gérer
le 1/x et le pb du "bug".
Sur le modèle du 1/x je m'étais amusé à tracé la partie entière

Figure asymptote 374a473976168251f4cd2701251b07f6
*** 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. import graph;
  2. size(200,IgnoreAspect);
  3. real f(real x) {return (real) floor(x);};
  4. bool3 branch(real x)
  5. {
  6. static int lastsign=-50;
  7. if(x-floor(x) == 0) return false;
  8. int sign=floor(x);
  9. bool b=lastsign ==-50 || sign == lastsign;
  10. lastsign=sign;
  11. return b ? true : default;
  12. }
  13. draw(graph(f,-4,4,n=1000,branch),black+1bp);
  14. axes("$x$","$y$",red);


Évidemment on peut préférer les tracés avec les crochets aux extrémités de chaque partie constante
de la fonction.

O.G.

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

Re: bool3 et valeur interdite

Message non lu par GM » mar. 5 juin 2012, 11:39

OG a écrit :je m'étais amusé à tracé la partie entière


Rappel d'une version différente :
http://www.marris.org/asymptote/Courbes_fonctions/index.html#fig_fa03_131111_fonction_partie_entiere

Figure asymptote 6c3ab056ae6694c3455366a1e858a336
*** 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. usepackage("amsmath");
  2. import graph;
  3. size(8cm,0);
  4.  
  5. real Floor(real x) {return floor(x);}
  6.  
  7. pair[] ListeDesPointsCompris;
  8. pair[] ListeDesPointsExclus;
  9.  
  10. //==================
  11. // bool3 est un booléen à trois états : true, default et false
  12. bool3 TestRelierOuPas(real x) {
  13. static real lasty;
  14. static bool first = true;
  15. real y = floor(x);
  16. bool memebranche = first || lasty == y;
  17. first = false;
  18. if(!memebranche) { ListeDesPointsExclus.push((x,lasty));
  19. ListeDesPointsCompris.push((x,y));
  20. }
  21. lasty=y;
  22. return memebranche ? true : default;
  23. };
  24. //==================
  25.  
  26. draw(graph(Floor,-5.5,5.5,500,TestRelierOuPas));
  27. axes("$x$",rotate(0)*"$\lfloor x\rfloor$",red);
  28.  
  29. dot(ListeDesPointsCompris);
  30. dot(ListeDesPointsExclus,UnFill);
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 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.66)+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 !

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

Re: bool3 et valeur interdite

Message non lu par GM » mar. 5 juin 2012, 11:47

Sur le même thème, je rappelle un exemple déjà donné... dont je ne sais plus dire s'il y a le problème d'impression de traits supplémentaires avec adobereader (qu'il faudrait donc aménager si tel est le cas).

Figure asymptote c5fc346e7ebb508501b64f17f9303d45
*** 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. defaultpen(fontsize(10pt));
  2. import graph_pi;
  3. import geometry;
  4. usepackage("fourier");
  5. usepackage("mathrsfs");
  6.  
  7. size(450,0);
  8.  
  9. real a=3;
  10.  
  11. graphicrules(xunit=.8cm, yunit=1.5cm,
  12. xmin=-3pi, xmax=3pi,
  13. ymin=-4, ymax=4,
  14. crop=Crop
  15. );
  16. // Définition et tracé de la grille
  17. grid(xStep=pi/4, xstep=pi/12,
  18. yStep=1, ystep=.25,
  19. pTick=.7bp+.4white,
  20. ptick=.7bp+.8white,
  21. above=false
  22. );
  23. // Définition et tracé des axes
  24. cartesianaxis(
  25. xticks=Ticks(labelfrac(factor=pi,
  26. symbol="\pi",
  27. symbolin=true,
  28. zero=false),
  29. Step=pi/2, step=pi/12,
  30. pTick=1bp+black,
  31. ptick=1bp+gray),
  32. yticks=Ticks(labelfrac(zero=false),
  33. Step=1, step=.5,
  34. pTick=1bp+black,
  35. ptick=1bp+gray),
  36. Arrow
  37. );
  38.  
  39. real f(real x) {return tan(x);}
  40. bool3 condition(real x)
  41. {
  42. static int derniersigne=0;
  43. real a=x/(pi/2);
  44. if(a==floor(a)) return false;
  45. int signe = sgn(tan(x));
  46. bool b = derniersigne == 0 || signe == derniersigne;
  47. derniersigne = signe;
  48. return b ? true : default;
  49. }
  50.  
  51. guide[] Cf=graph(f,-3pi-.5,3pi+.5,n=1000,condition);
  52. draw(Cf,linewidth(1bp)+blue);
  53. xlimits(-3pi-.7,3pi+.7,Crop);
  54. ylimits(-3.25,3.25,Crop);
  55. label("$\mathscr{C}_{\tan}$",(-10pi/6,f(-10pi/6)),E);
  56.  
  57. label("La fonction $x\mapsto\tan(x)$ est p\'eriodique de p\'eriode $\pi$ \qquad et impaire.",truepoint(N),N);
  58. distance("$T= \pi$",(0,f(0)),(pi,f(pi)),offset=-5mm,Arrows);


Edition par GM : je modifierai le code plus tard et supprimerai ce commentaire....... car je viens de réaliser, que la modification de graph_pi ne donne plus le découpage espéré que l'on avait avant : le même graphe avec la version de graph_pi précédente.
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 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.66)+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 !

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: bool3 et valeur interdite

Message non lu par maurice » mar. 5 juin 2012, 15:00

Bonjour, merci pour vos réponses.

Code : Tout sélectionner

bool3 branch(real x)
{
static int lastsign=-50;
if(x-floor(x) == 0) return false;
int sign=floor(x);
bool b=lastsign ==-50 || sign == lastsign;
lastsign=sign;
return b ? true : default;
}


Si je comprends en gros ce code, quel est l'intéret du static ?

De plus, quelle est la signification exacte de cette ligne :

Code : Tout sélectionner

bool b=lastsign ==-50 || sign == lastsign; 



Là se sont mes (faibles) connaissances en informatique qui sont dépassées.

Bruno
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

OG
V.I.P.
V.I.P.
Messages : 142
Enregistré le : dim. 7 mars 2010, 22:27

Re: bool3 et valeur interdite

Message non lu par OG » mar. 5 juin 2012, 16:53

Re

Merci pour l'exemple de la tangente.

Sans static une nouvelle variable est créée et initialisée à chaque appel
(donc pas de mémoire et le résultat n'est pas celui qu'on attend). Avec static
c'est la même case mémoire qui sert donc pour deux appels c'est la "même" variable.

== teste l'égalité
|| ou logique

O.G.

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: bool3 et valeur interdite

Message non lu par maurice » mar. 5 juin 2012, 16:57

Bonjour, merci pour les explications pour static

OG a écrit :
== teste l'égalité
|| ou logique

O.G.


Ca je savais, mais en gros :

Code : Tout sélectionner

bool b=lastsign ==-50 || sign == lastsign; 

déclare le booléen b qui est true si lastsgn égal -50 ou si sign égal lastsign ...
C'est ça qui n'est pas très clair...

Merci

Bruno
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

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

Re: bool3 et valeur interdite

Message non lu par GM » mar. 5 juin 2012, 19:23

OG a écrit :

Code : Tout sélectionner

bool3 branch(real x)
{
  static int lastsign=-50;
  if(x-floor(x) == 0) return false;
  int sign=floor(x);
  bool b=lastsign ==-50 || sign == lastsign;
  lastsign=sign;
  return b ? true : default;
}


Un "return false" pour la partie entière ? :roll:
Pourquoi ne placerait-on pas de point quand x=E(x) ?

Je crois que le modèle de bool3 relatif à 1/x n'est pas adapté pour la partie entière... et puis le nom des variables est perturbant car "lastsign" ne me semble pas adapté.
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 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.66)+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 !

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

Re: bool3 et valeur interdite

Message non lu par GM » mar. 5 juin 2012, 19:44

GM a écrit :Un "return false" pour la partie entière ? :roll:
Pourquoi ne placerait-on pas de point quand x=E(x) ?

Je crois que le modèle de 1/x n'est pas adapté pour la partie entière... et puis le nom des variables est perturbant car "lastsign" ne me semble pas adapté.


Je crois deviner que "return false" a été ajouté pour éviter d'avoir un point isolé pour la valeur entière xmax=4.
Mais pour un point gênant, enlever tous les points d'abscisses entières... c'est peut-être exagéré.

Figure asymptote b4133bdcd04f4acea967488179115867
*** 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. import graph;
  2. size(200,IgnoreAspect);
  3. real f(real x) {return (real) floor(x);};
  4. real xmin=-4, xmax =4;
  5. bool3 branch(real x)
  6. {
  7. if((x==xmax)&&(floor(x)==x)) return false; // << pour enlever uniquement le dernier point, isolé quand xmax est entier.
  8. static int partieentiereprecedente=05062012;
  9. int partieentiere=floor(x);
  10. bool onrelie= (partieentiereprecedente ==05062012) || (partieentiere == partieentiereprecedente);
  11. partieentiereprecedente = partieentiere;
  12. return onrelie ? true : default;
  13. }
  14. draw(graph(f,xmin,xmax,n=1000,branch),black+1bp);
  15. axes("$x$","$y$",red);
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 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.66)+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 !

Répondre