Lancers de dés

Voir le sujet précédent Voir le sujet suivant Aller en bas

Lancers de dés

Message  E. Corcelle le Jeu 19 Mar - 20:34

Bonjour,

Je vous poste une petite macro que j'utilise en classe.
Code:
    LancersDes = { LancersDes(nombre_de_dés(1ou2), nombre_de_lancers,[options])
   options :
     choixrepresent:=nombre, pourcent
     decimales:=1
     color}
   [choixrepresent:=pourcent, color:=orange, decimales:=1,
   SaveAttr(), $tmp:=%3,
   $ND:=%1, $NL:=%2, $Rep:=Seq(0,k,1,6*ND),
   Fenetre(ND-1+5*i*ND,ND*6+1-2*i,1+i),
   for $k from 1 to NL do
      $De:=0,
      for $p from 1 to ND do $De:=De+Rand(6)+1 od,
      replace(Rep,De,Rep[De]+1),
   od,
   FillStyle:=full, FillColor:=color,
   for $m from 1*ND to 6*ND do
      Ligne([-0.4+m,0.4+m,0.4+m+i*Rep[m]*5*ND/NL,-0.4+m+i*Rep[m]*5*ND/NL],1,0.1),
      LabelSize:=normal,
      if choixrepresent=nombre
      then $tmp:=round(Rep[m],decimales), Label(m+i*(0.5+Rep[m]*5*ND/NL),tmp)
      else $tmp:=round(Rep[m]*100/NL,decimales), Label(m+i*(0.5+Rep[m]*5*ND/NL),["",tmp," \%"])
      fi,
   LabelSize:=large, Label(m-0.5*i,m),
   od,
   Label((6*ND+ND)/2-1.5*i,[NL," lancers"]), size(12),
   RestoreAttr(),
   ];
LancersDes prend en argument :
- le nombre de dés lancers (au delà de quatre, ça devient illisible)
- le nombre de lancers
et les options :
- choixrepresent:=nombre ou pourcent
- color:=couleur des bâtons
- decimales:=nombre de décimales

Code:
LancersDes(2, 10,[choixrepresent:=nombre, color:=blue]),
donnera :

et
Code:
LancersDes(1, 30,[choixrepresent:=pourcent, color:=orange]),
donnera :


J'ai deux petits soucis :
1. Sous TeXmacs, malgré un choix de fenêtre dans les abscisses strictement positives, l'origine est toujours incluse dans la figure, à l'intérieur de TeXgraph, tout fonctionne à ce niveau.
2. Je viens de me rendre compte que l'option "decimales" ne fonctionne pas. Sûrement un petit oubli qui sera vite réglé.

Le plugin TeXmacs a été mis à jour avec une nouvelle entrée.
La macro a été ajoutée à tegraph_macros_texmacs.mac.

Emmanuël

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Lancers de dés

Message  P.Fradin le Ven 20 Mar - 0:47

Bonsoir Emmanuël,

Ah ces lancers de dés, jamais passés de mode! Trève de plaisanterie, j'ai testé ta macro et j'ai essayé d'apporter un tout petit peu d'assouplissement:

Code:

    LancersDes = { LancersDes(nombre_de_dés(1ou2), nombre_de_lancers,[options])
   options :
     choixrepresent:=nombre, pourcent
     decimales:=1
     color}
   [choixrepresent:=pourcent, color:=orange, decimales:=1,
   SaveAttr(), LabelSize:=normal, $tmp:=%3,
   $ND:=%1, $NL:=%2, $Rep:=Seq(0,k,1,6*ND),
   view(ND-1,ND*6+1,-2,10), size( min([0.75*(2+5*ND),16])+12*i,0),
   for $k from 1 to NL do
      $De:=0,
      for $p from 1 to ND do $De:=De+Rand(6)+1 od,
      replace(Rep,De,Rep[De]+1),
   od,
   $maxi:=max(Rep),
   FillStyle:=full, FillColor:=color,
   for $m from 1*ND to 6*ND do
      $y:=Rep[m]*(Ymax-0.5)/maxi,
      Ligne([-0.4+m,0.4+m,0.4+m+i*y,-0.4+m+i*y],1,0.1),
      if choixrepresent=nombre
      then $tmp:=round(Rep[m],decimales), Label(m+i*(0.25/Yscale+y),tmp)
      else $tmp:=round(Rep[m]*100/NL,decimales), Label(m+i*(0.25/Yscale+y),["",tmp," \%"])
      fi,
   od,
   LabelSize:=large, LabelAngle:=0, LabelStyle:=0,
   for m from ND to 6*ND do  Label(m-0.5*i/Yscale,m) od,
   Label((6*ND+ND)/2-1.5*i,[NL," lancers"]),
   RestoreAttr(),
   ];

Par exemple:

Code:

LancersDes(4, 1000, [choixrepresent:=pourcent, color:=orange, LabelAngle:=90, LabelStyle:=left ] )

donne:


PS1: la varaible globale color existe déjà, inutile de la déclarer dans ton fichier.
PS2: j'ai vu que tu as laissé les Eval( String( %... ) ) Laughing

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Lancers de dés

Message  E. Corcelle le Ven 20 Mar - 3:08

Bonsoir Patrick,

Merci beaucoup pour les améliorations.
Je me permettrai juste d'éloigner un peu les pourcentages des bâtons
Code:
Label(m+i*(0.35/Yscale+y),tmp)
pour avoir quelquechose de plus lisible si j'ajoute un :
Code:
size(12+6*i,0)
qui me permet de projeter les différents lancers en plein écran (au vidéo-projecteur).

Et aussi de mettre un peu plus d'espace pour les étiquettes de pourcentages qui sont parfois tronquées :
Code:
$y:=Rep[m]*(Ymax-1.5)/maxi,

PS1: la varaible globale color existe déjà, inutile de la déclarer dans ton fichier.
Je vais corriger ça.
PS2: j'ai vu que tu as laissé les Eval( String( %... ) )
Et dire que j'ai modifié le script tm_texgraph uniquement pour ça. Il doit me falloir le temps de faire mon deuil. Ce qui ne devrait plus tarder maintenant.

Aurais-tu une réponse pour mes deux petits problèmes ?

Tout a été mis à jour.

Emmanuël

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Lancers de dés

Message  P.Fradin le Ven 20 Mar - 11:33

E. Corcelle a écrit:
Aurais-tu une réponse pour mes deux petits problèmes ?

Bonjour Emmanuël,

Je ne contaste pas le premier problème!

Pour les décimales, le problème est un peu technique: quand TeXgraph analyse la commande suivante:

Code:

[Load("texgraph_macros_texmacs.mac"),
LancersDes(1, 30,[choixrepresent:=pourcent, color:=orange, decimales:=2])
]

Il ne peut pas savoir que decimales est la variable déclarée dans le fichier qui doit être chargée, car la commande est analysée jusqu'au bout avant d'être exécutée, donc pour lui decimales est une variable locale à la commande. C'est pour cela qu'il est préférable de charger les paquets ainsi:

Code:

{preload="texgraph_macros_texmacs.mac"}
LancersDes(1, 30,[choixrepresent:=pourcent, color:=orange, decimales:=2])

et là ça devrait fonctionner.

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Lancers de dés

Message  E. Corcelle le Sam 21 Mar - 3:04

Bonsoir,
Il ne peut pas savoir que decimales est la variable déclarée dans le fichier qui doit être chargée, car la commande est analysée jusqu'au bout avant d'être exécutée, donc pour lui decimales est une variable locale à la commande. C'est pour cela qu'il est préférable de charger les paquets ainsi:
Code:
{preload="texgraph_macros_texmacs.mac"}
LancersDes(1, 30,[choixrepresent:=pourcent, color:=orange, decimales:=2])
C'est bien ce que j'avais fait.
Il doit y avoir un soucis avec TeXmacs. Je viens de revérifier le problème de fenêtre, par exemple :

problème qui n'apparaît pas si la commande axe n'est pas utilisée.
Là, je bloque.

EDIT : Je viens de faire des tests en reprenant Eval(String(%...)) au lieu de %... . L'option decimale se remet alors à fonctionner.
Le retour de la vengeance de l'EvalString... Je savais bien qu'il ne se laisserait pas faire. Twisted Evil

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Lancers de dés

Message  P.Fradin le Sam 21 Mar - 13:00

E. Corcelle a écrit:
Il doit y avoir un soucis avec TeXmacs. Je viens de revérifier le problème de fenêtre, par exemple :

problème qui n'apparaît pas si la commande axe n'est pas utilisée.
Là, je bloque.

Ce n'est pas un bug, c'est tout à fait normal, tu crées un élément graphique (axes), puis tu changes la fenêtre active, mais ce changement va s'appliquer aux éléments graphiques à venir, regarde:

Tu vois? La commande Border(1) délimite la fenêtre active plus les marges. Moralité: on ne dessine pas avant de modifier la fenêtre (sauf si c'est un effet voulu).


EDIT : Je viens de faire des tests en reprenant Eval(String(%...)) au lieu de %... . L'option decimale se remet alors à fonctionner.
Le retour de la vengeance de l'EvalString... Je savais bien qu'il ne se laisserait pas faire. Twisted Evil

Ce n'est pas normal, chez moi l'option decimales fonctionne parfaitement (alors que j'ai viré tous les Eval(String(...)) ), dès que je charge le fichier de macros avec {preload=...}, par contre cela ne marche plus avec Load(..), mais c'est normal aussi.

PS: en deux mots ce que fait l'Eval(string(%1)) : il transforme l'argument %1 sous forme de chaine de caractères, puis demande à l'analyseur syntaxique d'analyser cette chaine qui devient alors une expres​sion(c'est à dire un arbre en mémoire) que TeXgraph évalue ensuite, ouf!! c'est lourd! Mais quand TeXgraph analyse cette chaine, il connait la variable decimales puisqu'il a chargé le fichier de macros à ce moment là (même si on a chargé avec Load). Le résultat est donc le même que si on charge ces macros avant d'analyser la commande dans TeXmacs. Si cela ne marche pas chez toi, c'est qu'il y a un autre problème.

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Lancers de dés

Message  E. Corcelle le Sam 21 Mar - 15:47

Bonjour Patrick,

Tu vois? La commande Border(1) délimite la fenêtre active plus les marges. Moralité: on ne dessine pas avant de modifier la fenêtre (sauf si c'est un effet voulu).
J'avais bien compris ce fonctionnement mais c'est mon exemple qui n'était vraiment pas bon.
Sur celui-ci, il y a bien un problème, n'est-ce pas ? La partie blanche à gauche de 4 ne devrait pas apparaître.

J'ajoute que si je remplace axes(0,1+i) par Point(0) par exemple, tout fonctionne correctement.
Il y a donc l'air d'y avoir un conflit idéologique entre TeXmacs et axes/Axes.

PS: en deux mots ce que fait l'Eval(string(%1)) : il transforme l'argument %1 sous forme de chaine de caractères, puis demande à l'analyseur syntaxique d'analyser cette chaine qui devient alors une expres​sion(c'est à dire un arbre en mémoire) que TeXgraph évalue ensuite, ouf!! c'est lourd! Mais quand TeXgraph analyse cette chaine, il connait la variable decimales puisqu'il a chargé le fichier de macros à ce moment là (même si on a chargé avec Load). Le résultat est donc le même que si on charge ces macros avant d'analyser la commande dans TeXmacs. Si cela ne marche pas chez toi, c'est qu'il y a un autre problème.
Je crois que j'ai tout compris. Le problème doit être ailleurs. Je vais continuer à chercher.

Merci pour le temps passé surtout que tout fonctionne parfaitement à partir de TeXgraph.

Emmanuël

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Lancers de dés

Message  P.Fradin le Sam 21 Mar - 16:47

Effectivement, après une séie de tests il s'avère qu'il y a bien parfois un décalage de la figure. Cela ne vient pas de TeXmacs, ni de TeXgraph d'ailleurs. Le seul export qui donne se problème est epsc, cet export utilise l'export pstricks, mais le décalage n'apparaît pas si j'exporte la figure avec pstricks, le problème est donc après, c'est à dire lors de la conversion dvi -> eps et c'est la commande dvips -E qui manifestement entraîne ce problème, mais cela demande confirmation. Par contre si on ajoute dans la commande l'instruction OriginalCoord(0), qui oblige TeXgraph à travailler en coordonnées de la feuille (origine en bas à gauche de la figure et unités en cm sur les axes, mais c'est transparent pour l'utilisateur), je constate que ce décalage disparaît!

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Lancers de dés

Message  E. Corcelle le Sam 21 Mar - 17:21

P.Fradin a écrit:Par contre si on ajoute dans la commande l'instruction OriginalCoord(0), qui oblige TeXgraph à travailler en coordonnées de la feuille (origine en bas à gauche de la figure et unités en cm sur les axes, mais c'est transparent pour l'utilisateur), je constate que ce décalage disparaît!
Ça me rassure un peu. Il suffit donc que je rajoute la commande OriginalCoord(0) dans mon script de lancement.
Merci. Je vais tester tout ça.

EDIT : Je viens de retester decimales qui ne me pose plus de problème avec $tmp:=%...
Je devais me tenir à côté de mes chausses.
Tout est bien qui finit bien encore un fois dans le monde merveilleux de TeXgraph.

E. Corcelle

Nombre de messages : 57
Age : 42
Date d'inscription : 28/11/2008

Voir le profil de l'utilisateur http://corcelle.wordpress.com/

Revenir en haut Aller en bas

Re: Lancers de dés

Message  Contenu sponsorisé Aujourd'hui à 2:07


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum