Retour

anim.tex

Télécharger le fichier
Image PNG
\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}