un type particulier

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 !
zariski
Messages : 141
Enregistré le : dim. 30 sept. 2012, 18:50

un type particulier

Message non lu par zariski » sam. 14 juin 2014, 09:24

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
Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022

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

Re: un type particulier

Message non lu par GM » sam. 14 juin 2014, 10:06

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 !").
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

zariski
Messages : 141
Enregistré le : dim. 30 sept. 2012, 18:50

Re: un type particulier

Message non lu par zariski » sam. 14 juin 2014, 10:15

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 ...
Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022

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

Re: un type particulier

Message non lu par GM » sam. 14 juin 2014, 10:19

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
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

zariski
Messages : 141
Enregistré le : dim. 30 sept. 2012, 18:50

Re: un type particulier

Message non lu par zariski » sam. 14 juin 2014, 10:28

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);
   }


Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022

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

Re: un type particulier

Message non lu par GM » sam. 14 juin 2014, 10:51

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). ;-)
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

zariski
Messages : 141
Enregistré le : dim. 30 sept. 2012, 18:50

Re: un type particulier

Message non lu par zariski » sam. 14 juin 2014, 10:54

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-------------------------------------------------------

Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022

zariski
Messages : 141
Enregistré le : dim. 30 sept. 2012, 18:50

Re: un type particulier

Message non lu par zariski » sam. 14 juin 2014, 10:57

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.
Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022

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

Re: un type particulier

Message non lu par GM » sam. 14 juin 2014, 11:22

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.
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

zariski
Messages : 141
Enregistré le : dim. 30 sept. 2012, 18:50

Re: un type particulier

Message non lu par zariski » dim. 15 juin 2014, 10:54

ç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
Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022

Répondre