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