C'est mon premier post, et j'ai besoin d'aide.
Je connais asymptote depuis près de 10 ans, mais je ne l'avais encore jamais utilisé car cela me semblait complexe, et la documentation assez obscure.
Je suis donc jusqu'à maintenant resté fidèle à pstricks + extensions.
Mais pour illustrer une présentation sur les projections cartographiques, pstricks est un peu dépassé, donc je me tourne avec beaucoup de difficultés vers asymptote.
Voila mon code :
Code : Tout sélectionner
settings.render=0;
settings.prc=false;
import three;
import solids;
import coastline;
size(8cm,0);
currentprojection=orthographic(2,2,1);
real radius = 1; // Rayon de la sphère
triple pS = (0, 0, -radius); // Pôle sud
triple pN = (0, 0, radius); // Pôle nord
triple center = (0, 0, 0); // Centre de la Terre
path3 NS_axis = (0, 0, -1.5)--(0, 0, 1.5);
transform3 scale_radius = scale(radius, radius, radius);
// Axes des pôles
draw(scale_radius*NS_axis, black + linewidth(1.5));
// path3 rot_arrow = arc((0, 0 ,1.4), .15, -90, 0, 90, 0);
// draw(scale_radius*rot_arrow, black);
// Symbolisation de la projection
real a = 15 * pi / 180;
real b = 45 * pi / 180;
path3 l = (0, 0, sin(b))--(cos(a)*cos(b), sin(a)*cos(b), sin(b))--(cos(a), sin(a), sin(b));
draw(scale_radius*l, red + linewidth(1.5));
dotfactor = 10;
dot(scale_radius*l, red + linewidth(2));
revolution sp = sphere(center, radius, n=12);
draw(surface(sp), surfacepen=.9*darkgreen + opacity(.4), meshpen=.9*darkgreen + opacity(.7));
draw(scale_radius*coastline, darkgreen);
revolution cy = cylinder(pS, radius, 2*radius, Z);
draw(surface(cy), surfacepen=.9*darkblue + opacity(.2), meshpen=.9*darkblue + opacity(.7));
draw(scale_radius*coastline_cylinder, darkblue);
Pour être complet, le fichier coastline.asy est généré par un script python à partir des données natural-earth.(shapefile)
https://www.dropbox.com/s/br9mp9iiot3xx ... .asy?raw=1
Mes problèmes sont les suivants:
* Comment faire pour que les traits de squelette des parties cachées se fassent discrètes ?
* Idem avec le trait de côte.
* Les coordonnées du trait de côte sur le cylindre sont générées en python. Comment le faire dans asymptote application d'une transformation (non affine) au trait de côte sur la sphère.
* Comment compiler ? L'image pdf que j'obtiens est déplorable (ps. je n'utilise pas acrobat reader, non libre et dont l'éditeur affiche un mépris ouvert pour la communauté linux)
Le meilleur compromis que j'ai trouvé est la chaine de compilation ci-dessous. Je préférerai conserver un format vectoriel, mais je ne veux pas être dépendant des caprices de rendu d'opacité de tel ou tel lecteur pdf.
Code : Tout sélectionner
asy -f eps -o projection_cylindrique.eps projection_cylindrique.asy
ps2pdf -dEPSCrop projection_cylindrique.eps projection_cylindrique.pdf
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -sOutputFile=projection_cylindrique.jpg projection_cylindrique.pdf
J'avais écarté dès le départ pstricks à cause du problème des faces cachées.