\documentclass{article} \usepackage{amsmath,amssymb} \usepackage{multido} \usepackage[nomessages]{fp} \usepackage[dvipsnames,svgnames]{pstricks} \usepackage{pstricks-add} \usepackage{pst-solides3d} \makeatletter \def\cartesianIIID@coor#1,#2,#3,#4\@nil{\edef\pst@coor{#1 #2 #3 }} \def\NormalIIIDCoor{% \def\pst@@getcoor##1{\pst@expandafter\cartesianIIID@coor{##1}, ,\@nil}% \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}% }% \def\pstThreeDLine{\NormalIIIDCoor\pst@object{lineIIID}} \def\lineIIID@i{% \pst@killglue% \pst@getarrows{% \begin@OpenObj% \pst@getcoors[\lineIIID@ii% }% } \def\lineIIID@ii{% \addto@pscode{% \tx@optionssolides SolidesDict begin counttomark /n exch def /n3 n 3 div cvi def n3 { n -3 roll 3dto2d /n n 1 sub def } repeat end \pst@cp\space \psline@iii\space \tx@Line }% \end@OpenObj% \ignorespaces% \SpecialCoor% } \def\pstThreePolygon{\NormalIIIDCoor\pst@object{polygonIIID}} \def\polygonIIID@i{% \pst@killglue% \pst@getarrows{% \begin@ClosedObj% \pst@getcoors[\polygonIIID@ii% }% } \def\polygonIIID@ii{% \addto@pscode{% \tx@optionssolides SolidesDict begin counttomark /n exch def /n3 n 3 div cvi def n3 { n -3 roll 3dto2d /n n 1 sub def } repeat end \pst@cp\space \psline@iii\space \tx@Polygon }% \end@ClosedObj% \ignorespaces% \SpecialCoor% } % macros d\'{e}j\`{a} pr\'{e}sentes dans pst-solides3d.tex % % transformation d'un point % \pstransformIIID[RotX=,...](x y z)(CX,CY,CZ) % Rotation d'un point(x y z) % autour des axes Ox, Oy et Oz % suivie % de la translation au point (CX,CY,CZ) \def\pstransformPoint{\def\pst@par{}\pst@object{pstransformPoint}} \def\pstransformPoint@i(#1)(#2,#3,#4)#5{{% coordonnees cartesiennes \begin@SpecialObj \pnode(! \tx@optionssolides SolidesDict begin #1 RotX RotY RotZ rotateOpoint3d #2 #3 #4 translatepoint3d 3dto2d cm_1 exch cm_1 exch end){#5}% \end@SpecialObj }\ignorespaces} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% la macro \psPoint %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % placer un point en particulier % \psPoint[options du point de vue](x y z) \def\psPoint{\def\pst@par{}\pst@object{psPoint}} \def\psPoint@i(#1,#2,#3)#4{{% coordonnees cartesiennes \begin@SpecialObj \pnode(! \tx@optionssolides SolidesDict begin #1 #2 #3 3dto2d cm_1 exch cm_1 exch end){#4}% \end@SpecialObj }\ignorespaces% } \makeatother \pagestyle{empty} \begin{document} % \section*{Metamorphosis from a Cylinder via Hyperboloid to a Double Cone} \psset{unit=0.725} \def\myFigure{% \psset{lightsrc=50 20 20,viewpoint=70 30 20,Decran=70} \rput(0,0){\multido{\i=0+4}{90}{% \pstVerb{% /xu \i\space sin 5 mul def /yu \i\space cos 5 mul def /xo \i\space \ai\space add sin 5 mul def /yo \i\space \ai\space add cos 5 mul def /xsu 0 sin 5 mul def /ysu 0 cos 5 mul def /xso 0 \ai\space add sin 5 mul def /yso 0 \ai\space add cos 5 mul def }% \pstThreeDLine[linecolor=blue,linewidth=0.01](xu,yu,-4)(xo,yo,4) \pstThreeDLine[linecolor=red,linewidth=0.01](xsu,ysu,-4)(xso,yso,4) \pstThreeDLine[linecolor=red,linewidth=0.01](0,0,4)(xso,yso,4) }} } \FPdiv{\myDeltaA}{180}{60}% \def\ai{0}% \FPdiv{\myDeltaB}{60}{60}% \def\bi{3}% \multido{\ii=1+1}{60}{% \begin{pspicture}(-9,0)(3,5) \myFigure% \end{pspicture} \newpage \FPadd{\ai}{\ai}{\myDeltaA} \FPsub{\bi}{\bi}{\myDeltaB} } \end{document}