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.
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.
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 !
Et voilà un exemple d'utilisation :
*** 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
import gm_tableaux_dev;
string[][] tab={
{"x", "-inf -2 1 +inf"},
{"x-1", " - | - 0 + "},
{"x+2", " - 0 + | + "},
{"(x-1)(x+2)", " + 0 - 0 + "}
};
picture tab0=tabsgn(tab,ul=1.2,p=1bp+orange);
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 :
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.
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