[HS] Un tableau déformé en fonction d'une donnée

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

[HS] Un tableau déformé en fonction d'une donnée

Messagepar cjorssen » Lundi 11 Avril 2011, 21:41

Bonsoir à tous,

Je suis conscient qu'il s'agit plus que probablement d'un hors-sujet... Je cherche à réaliser avec asymptote (pas totalement hs donc!) quelque chose qui ressemblerait à ça
Image

Comme vous pouvez le voir, les cases de la classification périodique des éléments sont déformées en fonction d'une propriété de la case en question (l'aire de la case est proportionnelle à la propriété, mais la case "colle" aussi à ses plus proches voisins, c'est ça qui me semble difficile). Je cherche tout embryon de début de réflexion sur ce point mais je n'ai aucune idée d'où chercher. Si quelqu'un a une idée...

En vous remerciant d'avance.

--
Christophe
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar GMaths » Lundi 11 Avril 2011, 22:24

cjorssen a écrit:les cases de la classification périodique des éléments sont déformées en fonction d'une propriété de la case en question (l'aire de la case est proportionnelle à la propriété, ...

"déformées en fonction d'une propriété" ?"
Je ne comprends pas. Quelle propriété ? Proportionnalité... tu es sûr ?
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar GMaths » Lundi 11 Avril 2011, 22:27

GMaths a écrit:"déformées en fonction d'une propriété" ?"
Je ne comprends pas. Quelle propriété ? Proportionnalité... tu es sûr ?

Je crois avoir compris : tu as des valeurs, à titre d'exemple, pour une propriété donnée ?

Mais si j'ai compris pour les valeurs... je ne m'explique pas certains choix de forme : sur quel(s) critères, pour une aire donnée, on a un choix de forme plutôt qu'une autre ?
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar cjorssen » Lundi 11 Avril 2011, 22:44

Bonsoir et merci de ta réponse.

GMaths a écrit:Je crois avoir compris : tu as des valeurs, à titre d'exemple, pour une propriété donnée ?


Tu peux trouver deux propriétés ici (pas pour tout le tableau, mais cela devrait suffire) : [url]ste417-41-44.wikispaces.com/file/view/propriétés+périodiques.xls[/url]

GMaths a écrit:Mais si j'ai compris pour les valeurs... je ne m'explique pas certains choix de forme : sur quel(s) critères, pour une aire donnée, on a un choix de forme plutôt qu'une autre ?
Moi non plus. Je me demande si chaque sommet du "carré" n'a pas un poids pondéré par ses plus proches voisins ??? Je ne sais pas bien comment fonctionne les courbes de Bézier, mais ne peut-on justement pas donner un poids à la courbure ???

--
Christophe
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar GMaths » Lundi 11 Avril 2011, 22:50

cjorssen a écrit:
GMaths a écrit:Mais si j'ai compris pour les valeurs... je ne m'explique pas certains choix de forme : sur quel(s) critères, pour une aire donnée, on a un choix de forme plutôt qu'une autre ?
Moi non plus. Je me demande si ...

N'as tu pas un nom de personne à contacter... pour tenter d'avoir des infos ?
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar cjorssen » Mardi 12 Avril 2011, 08:51

GMaths a écrit:N'as tu pas un nom de personne à contacter... pour tenter d'avoir des infos ?


Je viens de contacter l'auteur. On verra s'il me répond. Je vous tiens au courant si c'est exploitable avec asymptote.

Merci

--
Christophe
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar GMaths » Mardi 12 Avril 2011, 09:19

Une remarque : dans la mesure où on se demande, nous, quels ont été les critères du choix des formes... ne faut-il pas se demander si c'est un type pertinent de représentation, c'est à dire une représentation susceptible d'être comprise spontanément, sans décodage nécessaire par un initié.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar cjorssen » Mardi 12 Avril 2011, 09:26

cjorssen a écrit:Je viens de contacter l'auteur. On verra s'il me répond. Je vous tiens au courant si c'est exploitable avec asymptote.


C'était une bonne idée Gaëtan. L'auteur m'a répondu : il s'agit de density equalised cartograms. On peut trouver pas mal de chose sur l'algorithme qu'il me faut maintenant lire :-)

http://www2.imperial.ac.uk/~mgastner/cartogram/cartogram.html
http://www-personal.umich.edu/~mejn/cart/
http://www.worldmapper.org/index.html

À première vue, cela doit être adaptable à asymptote (peut-être pas le calcul..., mais l'utiilisation du résultat du calcul).
--
Christophe
Dernière édition par cjorssen le Mardi 12 Avril 2011, 09:38, édité 1 fois.
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar Romain Janvier » Mardi 12 Avril 2011, 09:31

On peut "facilement" deformer du texte ou une image avec asymptote ? Je ne suis pas allé voir les algos, mais on ne pourrait pas imaginer déformer un plan en 3D et plaquer l'image du tableau dessus ?
Romain Janvier
Kilo-utilisateur
 
Messages: 146
Inscription: Lundi 23 Août 2010, 13:57
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar maurice » Mardi 12 Avril 2011, 12:13

Bonjour

Des choses comme ça ?

e4b83c8971dc0601539075e02b2db643.png

Code: Tout sélectionner
unitsize(1cm);


path cote_hor(pair pA, pair pB, real poids, real att) {
real poids=poids/att;
path g=pA..controls (pA.x+poids,pA.y+poids) and (pB.x-poids,pB.y+poids)..pB;
return g;
}


path cote_ver(pair pA, pair pB, real poids, real att) {
real poids=poids/att;
path g=pA..controls (pA.x+poids,pA.y+poids) and (pB.x+poids,pB.y-poids)..pB;
return g;
}





string[][] elements={{"B", "C", "N", "O", "F", "Ne"},
{"Al", "Si", "P", "C", "Cl", "Ar"},
{"Ga", "Ge", "As", "Se", "Br", "Cr"}};

pair[][] sommets=new pair[7][4];
for(int i=0; i<7; ++i) {
srand((int)time("%S"));
for (int j=0; j<4; ++j) {
if (i==0 || i==6) sommets[i][j]=(i,j);
else {
real s=unitrand()-0.5;
sommets[i][j]=(i+s,j);
}
}
}

real[][] poids_hor=new real[6][4];
for (int i=0; i<6; ++i) {
for (int j=0; j<4; ++j) poids_hor[i][j]=unitrand()-0.5;
}

real[][] poids_ver=new real[7][3];
for (int i=0; i<7; ++i) {
for (int j=0; j<3; ++j) poids_ver[i][j]=unitrand()-0.5;
}



void tab_periodic(string[][] elements, pair[][] sommets, real[][] poids_hor, real[][] poids_ver, real att=1.5, pen p=currentpen, pen p2=yellow) {

// ON TRACE LE CADRE

path g1;
for (int i=0; i<5; ++i) g1=g1--cote_hor(sommets[i][0], sommets[i+1][0], poids_hor[i][0], att);
path g2;
for (int j=0; j<3; ++j) g2=g2--cote_ver(sommets[6][j], sommets[6][j+1], poids_ver[6][j], att);
path g3;
for (int i=0; i<5; ++i) g3=g3--cote_hor(sommets[i][3], sommets[i+1][3], poids_hor[i][3], att);
path g4;
for (int j=0; j<3; ++j) g4=g4--cote_ver(sommets[0][j], sommets[0][j+1], poids_ver[0][j], att);
path g=g1--g2--reverse(g3)--reverse(g4)--cycle;
filldraw(g, p, 1bp+p2);


// ON TRACE LES CASES

for (int i=0; i<6; ++i) {
for (int j=1; j<3; ++j) {
draw(cote_hor(sommets[i][j], sommets[i+1][j], poids_hor[i][j], att), 1bp+p2);
}
}
for (int i=1; i<6; ++i) {
for (int j=0; j<3; ++j) {
draw(cote_ver(sommets[i][j], sommets[i][j+1], poids_hor[i][j], att), 1bp+p2);
}
}


// ON ECRIT LES SYMBOLES
for (int i=0; i<3; ++i) {
for (int j=0; j<6; ++j) {
transform t=scale(sommets[j+1][i].x-sommets[j][i].x, sommets[j][i+1].y-sommets[j][i].y);
label(t*elements[2-i][j],(sommets[j][i]+sommets[j+1][i+1])/2, white);
}
}

}


tab_periodic(elements, sommets, poids_hor, poids_ver, p=rgb(1,0.8,0), p2=white);


Maurice

PS : 1er jet, il y a plein d’améliorations à faire ....
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar cjorssen » Mardi 12 Avril 2011, 20:54

maurice a écrit:Des choses comme ça ?

PS : 1er jet, il y a plein d’améliorations à faire ....
Pas mal, pas mal pour un premier jet !

Je vais essayer d'adapter le code de l'algorithme cité plus haut. Mais c'est une très bonne base si on veut faire simple. Un grand merci !

--
Christophe
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar maurice » Mercredi 13 Avril 2011, 23:16

Bonsoir, voici le deuxième jet, même si cela ne correspond pas tout à fait à la demande :

Code: Tout sélectionner
unitsize(1cm);


path cote_hor(pair pA, pair pB, real poids, real att) {
   real poids=poids/att;
   path g=pA..controls (pA.x+poids,pA.y+poids) and (pB.x-poids,pB.y+poids)..pB;
   return g;
}


path cote_ver(pair pA, pair pB, real poids, real att) {
   real poids=poids/att;
   path g=pA..controls (pA.x+poids,pA.y+poids) and (pB.x+poids,pB.y-poids)..pB;
   return g;
}

srand((int)time("%S"));   


string[][] block={{"H", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "He"},
        {"Li", "Be", "", "", "", "", "", "", "", "", "", "", "B", "C", "N", "O", "F", "Ne"},
        {"Na", "Mg", "", "", "", "", "", "", "", "", "", "", "Al", "Si", "P", "C", "Cl", "Ar"},
        {"K", "Ca", "Sc" ,"Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Cr"},
        {"Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn", "Sb", "Te", "X", "Xe"},
        {"Cs", "Ba", "", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg", "Tl", "Pb", "Bi", "Po", "At", "Rn"},
        {"Fr", "Fa", "", "Rf", "Db", "Sg", "Bh", "Hs", "Mt", "Ds", "Rg", "Cn", "", "", "", "", "", ""},
        {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""},
        {"", "", "", "La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu"},
                  {"", "", "", "Ac", "Th", "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr"}};

pair[][] sommets=new pair[11][19];
for(int i=0; i<11; ++i) {
   srand((int)time("%S"));
   for (int j=0; j<19; ++j) {
   if (i==0 || i==10 || j==0 || j==18) {sommets[i][j]=(j,-i);}
      else {
         real s=unitrand()-0.5;
         real t=unitrand()-0.5;
         sommets[i][j]=(j+s,-i+t);
      }
   }
}

real[][] poids_hor=new real[11][18];
for (int i=0; i<11; ++i) {
   for (int j=0; j<18; ++j) poids_hor[i][j]=unitrand()-0.5;
}

real[][] poids_ver=new real[10][19];
for (int i=0; i<10; ++i) {
   for (int j=0; j<19; ++j) poids_ver[i][j]=unitrand()-0.5;
}

path case(string s,
          pair p1,
          pair p2,
          pair p3,
          pair p4,
          real poids_hor1,
          real poids_hor2,
          real poids_ver1,
          real poids_ver2,
          real att=1.5) {
                path g;
         if (s != "") {
         path g1=cote_hor(p1, p2, poids_hor1, att);
         path g2=cote_ver(p2, p3, poids_ver1, att);
         path g3=cote_hor(p3, p4, poids_hor2, att);
         path g4=cote_ver(p4, p1, poids_ver2, att);
         g = g1--g2--g3--g4--cycle;
         }
         else {g=scale(0.1)*((0,0)--(1,0)--(1,1)--cycle);}
         return g;
}

for (int i=0; i<10; ++i) {
   for (int j=0; j<18; ++j) {
      pen p;
      if (j<2 && i<8) {p=rgb(0.1,0.7,0);}
      if (j>1 && j<12 && i<8) {p=heavyred;}
      if (j>11 && i<8) {p=rgb(1,0.8,0);}
      if (i>=8) {p=rgb(0.1,0.7,0);}
       filldraw(case(block[i][j],
            sommets[i][j],
                sommets[i][j+1],
                sommets[i+1][j+1],
                sommets[i+1][j],
                poids_hor[i][j],
                poids_hor[i+1][j],
                poids_ver[i][j+1],
                poids_ver[i][j],
                att=1.5), p, 1bp+white);
       label(block[i][j], (sommets[i][j]+sommets[i+1][j+1])/2, white);
   }
}




Mauirce
periode7.png


Bon c'est pas terrible !!!
Je reste intéressé par la construction de carte par anamorphose !
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant

Re: [HS] Un tableau déformé en fonction d'une donnée

Messagepar cjorssen » Jeudi 14 Avril 2011, 19:11

maurice a écrit:Bon c'est pas terrible !!!
Je reste intéressé par la construction de carte par anamorphose !


Pas mal quand même ! Je te trouve très dur !

Je pars en vacances sans internet mais avec la doc d'asymptote. Je vous tiens au courant en rentrant 8)

--
Christophe
cjorssen
Déca-utilisateur
 
Messages: 49
Inscription: Jeudi 05 Novembre 2009, 15:08
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité