Je cherche à reproduire la figure de P.Ivaldi ici http://www.piprime.fr/744/asymptote-usi ... y-fig0040/. Je me suis fabriqué un wrapper qui permet de lancer "intelligemment" asy depuis une compilation latex. Alors, quand je compile avec pdflatex (et donc que je demande à asy de me sortir un pdf), je n'ai rien qui s'affiche dans evince. Quand je compile avec latex, j'ai un truc, mais c'est moche. Quand je demande séparément à asy de me produire un png, j'ai un truc avec une résolution médiocre et un décalage. J'avoue que ce schéma est une des seules raisons qui m'ont fait venir à asymptote par rapport à tikz alors je suis vraiment déçu (snif). Si quelqu'un a une idée ? Est-ce que ça pourrait être le viewer ? Est-ce que ça pourrait être les prc ? Est-ce qu'il pourrait me manquer des bibliothèques de 3D (à la compilation d'asymptote, j'en aurais été averti, non ?) ?
Merci d'avance.
Asymptote version 1.89svn
Ubuntu 9.04
TeXLive 2008
Code : Tout sélectionner
\documentclass{article}
\usepackage{moreverb}
\usepackage{graphicx}
\usepackage{ifpdf}
\makeatletter
\def\asy@fig@count{\z@}
\newenvironment{asyalt}{}{}
\newif\ifasy@mdfive
\let\asy@end@first\relax
\let\asy@end@second\relax
\def\asy@compare@two@mdfive#1#2{%
\asy@compare@two@mdfive@i#1\asy@end@first\asy@nil#2\asy@end@second\asy@nil}
\def\asy@compare@two@mdfive@i#1#2\asy@nil#3#4\asy@nil{%
\if#1#3
\ifx\relax#2
\def\asy@next{\asy@mdfivetrue}%
\else
\def\asy@next{\asy@compare@two@mdfive@i#2\asy@nil#4\asy@nil}%
\fi
\else
\def\asy@next{\asy@mdfivefalse}%
\fi
\asy@next}
\def\asy@compile{%
\ifpdf
\immediate\write18{asy -f pdf \asy@fig@filename}
\else
\immediate\write18{asy \asy@fig@filename}
\fi}
\def\asyalt{%
\@tempcnta=\asy@fig@count\relax
\advance\@tempcnta\@ne
\xdef\asy@fig@count{\the\@tempcnta}%
\edef\asy@fig@filename{\jobname-asy-fig-\asy@fig@count.asy}%
\IfFileExists{\jobname-asy-fig-\asy@fig@count.asy}%
{% Asy file already exists: need to see if a newer version exists
\edef\asy@fig@filename@tmp{%
\jobname-asy-fig-\asy@fig@count.asy.tmp}%
\def\asy@next{\verbatimwrite{\asy@fig@filename@tmp}}}
{% Asy file does not exist: no problem
\let\asy@fig@filename@tmp\relax
\def\asy@next{\verbatimwrite{\asy@fig@filename}}}%
\asy@next}
\def\endasyalt{%
\endverbatimwrite%
\ifx\asy@fig@filename@tmp\relax
\asy@compile
\else
\edef\asy@temp{%
\noexpand\asy@compare@two@mdfive{%
\pdfmdfivesum file{\asy@fig@filename}}{%
\pdfmdfivesum file{\asy@fig@filename@tmp}}}
\asy@temp%
\ifasy@mdfive
\immediate\write18{rm -f \asy@fig@filename@tmp}
\else
\immediate\write18{mv \asy@fig@filename@tmp\space\asy@fig@filename}
\asy@compile
\fi
\fi
\includegraphics{\jobname-asy-fig-\asy@fig@count}}
\begin{document}
\begin{asyalt}
unitsize(1inch);
path T,ct,tt;
T=(0,0)--(1,0)--(1/2,sqrt(3)/2)--cycle;
ct=(0,0)..(1,0)--(1/2,sqrt(3)/2)..cycle;
tt=shift(sqrt(3)/6*dir(30))*(scale(1/2)*T);
draw(T);
draw(shift(2*right)*ct);
fill(reverse(shift(4*right)*tt)^^(shift(4*right)*T),blue);
\end{asyalt}
\begin{asyalt}
import three;
size(8cm,0);
real radius=1, theta=37, phi=60;
currentprojection=perspective(4,1,2);
// Planes
pen bg=gray(0.9)+opacity(0.5);
draw(surface((1.2,0,0)--(1.2,0,1.2)--(0,0,1.2)--(0,0,0)--cycle),bg,bg);
draw(surface((0,1.2,0)--(0,1.2,1.2)--(0,0,1.2)--(0,0,0)--cycle),bg,bg);
draw(surface((1.2,0,0)--(1.2,1.2,0)--(0,1.2,0)--(0,0,0)--cycle),bg,bg);
real r=1.5;
draw(Label("$x$",1), O--r*X, Arrow3(HookHead3));
draw(Label("$y$",1), O--r*Y, Arrow3(HookHead3));
draw(Label("$z$",1), O--r*Z, Arrow3(HookHead3));
label("$\rm O$", (0,0,0), W);
triple pQ=radius*dir(theta,phi); // Point Q
// triple pQ=radius*expi(radians(theta),radians(phi)); // Point Q
draw(O--radius*dir(90,phi)^^O--pQ, dashed);
dot("$R*\mathrm{dir}\left(\theta,\phi\right)$",pQ);
// Arcs
draw("$\theta$", reverse(arc(O,0.5*pQ,0.5*Z)), N+0.3E, Arrow3(HookHead2));
draw("$\phi$", arc(O,0.5*X,0.5*(pQ.x,pQ.y,0)), N+0.3E, Arrow3(HookHead2));
path3 p3=O--arc(O,radius,0,phi,90,phi)--cycle;
draw(surface(p3), blue+opacity(0.5));
\end{asyalt}
\end{document}
Christophe