Page 1 sur 2

un type particulier

Posté : sam. 14 juin 2014, 09:24
par zariski
Bonjour !
En fouinant sur des codes concernant des tableaux, je tombe sur la notion OBJECT.
Il semblerait que cela soit un type mais nada dans la doc officielle...
Un éclaircissement svp ?
Merci

Re: un type particulier

Posté : sam. 14 juin 2014, 10:06
par GM
zariski a écrit :Bonjour !/quote]

Bonjour,
zariski a écrit :Il semblerait que cela soit un type mais nada dans la doc officielle...
Un éclaircissement svp ?
Merci
Un coup de Ctrl+F dans la doc sur le mot "object" et on trouve des choses... mais cela dépend ce que tu cherches exactement.
Image
Je rappelle aussi l'existence de l'index : http://gmaths.net/asy/index/?filtre=object (penser à "Afficher tout !").

Re: un type particulier

Posté : sam. 14 juin 2014, 10:15
par zariski
En fait pour être plus précis j'aimerai savoir ce que fait ce code :

pen stylo=fontsize(ul*10pt);
int n=tab.length;

object[] obj=new object[tab.length];

real larg,haut;


for(int k=0; k<n; ++k){
obj[k]=object(Label(tab[k][0],stylo));
larg=max(larg,(max(obj[k])-min(obj[k])).x);
haut=max(haut,(max(obj[k])-min(obj[k])).y);
}

J'ai bien une petite idée mais bon ...

Re: un type particulier

Posté : sam. 14 juin 2014, 10:19
par GM
zariski a écrit :En fait pour être plus précis j'aimerai savoir ce que fait ce code :
Avec un code complet... (et mis entre code et /code... grâce au bouton prévu à cet effet), ce serait beaucoup mieux.
Image

Re: un type particulier

Posté : sam. 14 juin 2014, 10:28
par zariski

Code : Tout sélectionner


pen stylo=fontsize(ul*10pt);
   int n=tab.length;
   object[] obj=new object[tab.length];
   real larg,haut;


   for(int k=0; k<n; ++k){
       obj[k]=object(Label(tab[k][0],stylo));
       larg=max(larg,(max(obj[k])-min(obj[k])).x);
       haut=max(haut,(max(obj[k])-min(obj[k])).y);
   }



Re: un type particulier

Posté : sam. 14 juin 2014, 10:51
par GM
GM a écrit :Avec un code complet...
Comment expliquer un code incomplet ? Tu le sors d'où ?

ul, je peux deviner

mais tab ?

et il manque ce qui suit pour dire à quoi servent larg et haut ?

Si tu as compris cette suite qui manque, vu que tu ne la mets pas,... alors tu sais ce que font ces lignes. ;-)

Même recommandation ici que sur les sites d'aide à LaTeX : on adore les ECM (exemples complets minimaux). ;-)

Re: un type particulier

Posté : sam. 14 juin 2014, 10:54
par zariski
c'est votre œuvre cher ami !
Le code est un peu long et se nomme "gm_tabsgn" il me semble.

Code : Tout sélectionner

//---- gm_tabsigne-------------------------------------------------------
picture tabsgn(string[][] tab, real ul=1, real kx=1.1, real ky=1.2 ,pen p=0.5bp+black){

   picture pic;
   pen stylo=fontsize(ul*10pt);
   int n=tab.length;
   object[] obj=new object[tab.length];
   real larg,haut;


   for(int k=0; k<n; ++k){
       obj[k]=object(Label(tab[k][0],stylo));
       larg=max(larg,(max(obj[k])-min(obj[k])).x);
       haut=max(haut,(max(obj[k])-min(obj[k])).y);
   }

   string[] lx;
   lx=split(tab[0][1]," ");

   object[] lxo=new object[lx.length];
   real xlarg,xhaut,dxl=1.1;


   for(int i=0; i<lx.length; ++i){
       lxo[i]=object(Label(lx[i],stylo));
       xlarg=max(xlarg,(max(lxo[i])-min(lxo[i])).x);
   }

   larg*=kx/2; haut*=ky/2; xlarg*=kx*1.5;
   draw(pic,(-larg,haut-2n*haut)--(-larg,haut)--(larg,haut)--(larg,haut-2n*haut),p);


   for(int k=0; k<n; ++k){
       add(pic,shift(0,-2k*haut)*obj[k]);
       draw(pic,(-larg,haut-2(k+1)*haut)--(larg,haut-2(k+1)*haut),p);
       real L=(lxo.length-1/2)*xlarg;
       if(k==0) {
          draw(pic,(larg,haut)--(dxl^2*larg+L,haut)--(dxl^2*larg+L,-haut)--(larg,-haut),p);
          for(int i=0; i<lxo.length; ++i)
            add(pic,shift(dxl*larg+(1/4+i)*xlarg,0)*lxo[i]);
       } else {
         string[] ly;
         real l=xlarg/30;
         ly=split(tab[k][1]," ");
         for(int i=0; i<ly.length; ++i){
            real xla = dxl*larg+(1/4+i/2)*xlarg;
            label(pic,shift(xla,-k*2haut)*(ly[i]),stylo);
         }
         draw(pic,(dxl^2*larg+L,haut-k*2haut)--(dxl^2*larg+L,-haut-k*2haut)--(larg,-haut-k*2haut),p);
       }
     }


   return pic;
}
//---- Fin gm_tabsigne-------------------------------------------------------


Re: un type particulier

Posté : sam. 14 juin 2014, 10:57
par zariski
en fait j'essaie de faire un code qui produise un tableau (pas forcément de signe), un peu à la façon Latex...
Je trouve qu'il y a là des possibilités plus importantes que sous Latex.
Le hic c'est que je ne maitrise pas bien Asymptote. La syntaxe est pénible à comprendre.

Re: un type particulier

Posté : sam. 14 juin 2014, 11:22
par GM
zariski a écrit :c'est votre œuvre cher ami !
Le code est un peu long et se nomme "gm_tabsgn" il me semble.
Cela devient tout de suite plus clair ! :lol:

Et voilà un exemple d'utilisation :

Figure asymptote 3c3132d379b55ecb5173e090b556db37
*** 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 gm_tableaux_dev;
  2.  
  3. string[][] tab={
  4. {"x", "-inf -2 1 +inf"},
  5. {"x-1", " - | - 0 + "},
  6. {"x+2", " - 0 + | + "},
  7. {"(x-1)(x+2)", " + 0 - 0 + "}
  8. };
  9. picture tab0=tabsgn(tab,ul=1.2,p=1bp+orange);
  10. add(tab0);


On peut y voir ce que contient tab.

Je commente la partie de code qui t'intéresse :

On récupère le nombre n de lignes du tableau :

Code : Tout sélectionner

int n=tab.length;
On déclare un tableau d'objets (obj) de taille n,
ainsi que deux variables (larg et haut) qui à l'issue de la boucle FOR vont contenir la largeur et la hauteur maximale d'une liste d'objets.

Code : Tout sélectionner

object[] obj=new object[tab.length];
real larg,haut;
Chaque première chaine de caractères de chaque liste de tab (c'est à dire "x", "x-1", "x+2", "(x-1)(x+2)" pour l'exemple),
va donner lieu à la création d'un objet (texte entouré d'une enveloppe de forme rectangulaire) qui a donc une largeur et une hauteur
que je récupère via les coordonnées x et y d'un vecteur "diagonale" qui est (max(obj[k])-min(obj[k]).

Code : Tout sélectionner

for(int k=0; k<n; ++k){  //
    obj[k]=object(Label(tab[k][0],stylo));
    larg=max(larg,(max(obj[k])-min(obj[k])).x);
    haut=max(haut,(max(obj[k])-min(obj[k])).y);
}
La boucle va donc déterminer la largeur et la hauteur maximales des formules à écrire dans la première colonne du tableau de signes... dont je me sers ensuite pour savoir où placer textes et traits.

Re: un type particulier

Posté : dim. 15 juin 2014, 10:54
par zariski
ça devient plus clair, merci.
Mon idée était la bonne mais le coup du vecteur diagonal était un peu chaud.
Encore merci.
Je poursuis ma quête ... A suivre