Retour

addons_pst_solides.tex

Télécharger le fichier Fichier PDF
\documentclass[a4paper]{article}
\usepackage{pst-solides3d}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[garamond]{mathdesign}
\renewcommand{\ttdefault}{lmtt}
\usepackage{url}
\usepackage[colorlinks=true]{hyperref}
\usepackage[a4paper]{geometry}
\usepackage{showexpl}
\usepackage[french]{babel}
 
\makeatletter
\def\psgridIIID{\pst@object{psgridIIID}}
%% usage : \psgridIIID[options](x_min,x_max)(y_min,y_max)
\def\psgridIIID@i(#1,#2)(#3,#4){%
  \pst@killglue%
  \begingroup%
  \use@par%
\psSolid[object=parallelepiped,
   tracelignedeniveau=false,
   a={#2 #1 sub},b={#4 #3 sub},c={\pst@solides@@Zmax\space \pst@solides@@Zmin\space sub},action=draw](0,0,\pst@solides@@QZ)
\pst@cnta=#2 %
\advance\pst@cnta by -#1 \advance\pst@cnta by 1
\multido{\ix=#1+1}{\pst@cnta}{%
    \psPoint(\ix\space,#4,\pst@solides@@Zmin){X1}
    \psPoint(\ix\space,#4 .2 add,\pst@solides@@Zmin){X2}
    \psline(X1)(X2)
    \uput[\pst@solides@@spotX](X1){\small\ix}}
\pst@cnta=#4 %
\advance\pst@cnta by -#3 \advance\pst@cnta by 1%
\multido{\iy=#3+1}{\pst@cnta}{%
    \psPoint(#2,\iy\space,\pst@solides@@Zmin){Y1}
    \psPoint(#2 .2 add,\iy\space,\pst@solides@@Zmin){Y2}
    \psline(Y1)(Y2)
    \uput[\pst@solides@@spotY](Y1){\small\iy}}
\pst@cnta=\pst@solides@@Zmax %
\advance\pst@cnta by -\pst@solides@@Zmin \advance\pst@cnta by 1
\multido{\iz=\pst@solides@@Zmin+1}{\pst@cnta}{%
    \psPoint(#2,#3,\iz\space){Z1}
    \psPoint(#2,#3 .2 sub,\iz\space){Z2}
    \psline(Z1)(Z2)
    \uput[\pst@solides@@spotZ](Z1){\small\iz}}
\psSolid[object=vecteur,
      args=0 0 2,
      linecolor=red](0,0,\pst@solides@@Zmax)
\psSolid[object=vecteur,
      args=2 0 0,
      linecolor=red](#2,0,0)
\psSolid[object=vecteur,
      args=0 2 0,
      linecolor=red](0,#4,0)
\psPoint(0,0,\pst@solides@@Zmax\space 2 add){Z'}
\psPoint(#2 2 add,0,0){X'}
\psPoint(0,#4 2 add, 0){Y'}
\psPoint(0,0,\pst@solides@@Zmax){Z}
\psPoint(#2,0,0){X}
\psPoint(0,#4,0){Y}
\psPoint(0,0,0){O}
\uput[\pst@solides@@spotY](X'){$x$}
\uput[\pst@solides@@spotX](Y'){$y$}
\uput[u](Z'){$z$}
\psline[linestyle=dashed](O)(X)
\psline[linestyle=dashed](O)(Y)
\psline[linestyle=dashed](O)(Z)
  \endgroup%
  \ignorespaces%
}
\makeatother
 
\newcommand\Cadre[1]{\psframebox[fillstyle=solid,fillcolor=yellow,linecolor={[cmyk]{0,0,1,0.1}}]{\texttt{#1}}}
\title{Les options et les objets `cachés' de \texttt{pstsolides3d}}
\begin{document}
\maketitle
\begin{abstract}
Ce document présente les options et les objets qui n'ont pas pu être traités dans la documentation générale.
\begin{itemize}
  \item L'option \texttt{[transform]} ;
  \item les options \texttt{[inhue]} et \texttt{[inouthue]} ;
  \item l'objet \texttt{[object=vecteur]} ;
  \item l'objet \texttt{[object=polygoneregulier]} ;
  \item l'objet \texttt{[object=objfile]}.
\end{itemize}
\end{abstract}
\tableofcontents
\section{L'option \texttt{transform}}
Pour la démonstration, l'objet qui subira la transformation est un cube. Le cube de référence est en jaune,
le cube transformé en vert et le cube en fil de fer représente le cube avant transformation.
 
\subsection{Facteur d'échelle identique appliqué aux trois coordonnées}
Le facteur d'échelle est pris égal à $0.5$. On l'introduit soit en définissant la variable `\texttt{/Facteur}' :
\begin{verbatim}
\pstVerb{/Facteur {.5 mulv3d} def}%
\end{verbatim}
puis en l'introduisant dans l'option `\texttt{transform}' :
\begin{verbatim}
\psSolid[object=cube,a=2,ngrid=3,
         transform=Facteur](2,0,1)%
\end{verbatim}
soit directement dans le code :
\begin{verbatim}
\psSolid[object=cube,a=2,ngrid=3,
         transform={.5 mulv3d}](2,0,1)%
\end{verbatim}
\begin{LTXexample}[pos=t]
\psset{SphericalCoor,viewpoint=20 60 20,lightsrc=10 15 7,Decran=20}
\begin{pspicture}(-5,-5)(6,5)
\psframe(-5,-4)(6,5)
\psSolid[object=grille,base=-4 4 -4 4,fillcolor=red!50]%
\axesIIID(0,0,0)(4,4,4)%
\psSolid[object=cube,
      a=2,ngrid=3](-2,0,1)
\psSolid[object=cube,
      a=2,transform={.5 mulv3d},
      ngrid=3](2,0,1)
\psSolid[object=cube,
      action=draw,
      a=2,ngrid=3](2,0,1)
\end{pspicture}
\end{LTXexample}
\Cadre{Le facteur d'échelle s'applique aussi aux coordonnées de la position du centre du cube.}
\subsection{Facteur d'échelle différent pour les trois coordonnées}
Prenons, par exemple, que l'on applique un facteur de 0.75 pour $x$, 2 pour $y$ et 0.5 pour $z$, on transforme ainsi un cube en un parallélépipède.
\begin{LTXexample}[pos=t]
\psset{SphericalCoor,viewpoint=20 60 20,lightsrc=10 15 7,Decran=20}
\begin{pspicture}(-5,-5)(6,5)
\psframe(-5,-4)(6,5)
\psSolid[object=grille,base=-4 4 -4 4,fillcolor=red!50]%
\axesIIID(0,0,0)(4,4,4)%
\pstVerb{
/XYZscale {
4 dict begin
   /M defpoint3d % on récupère les coordonnées
   /X' M pop pop 0.75 mul def % X' = 0.75*X
   /Y' M pop 4 mul exch pop def % Y' = 4*Y
   /Z' M 0.5 mul 3 -2 roll pop pop def % Z' = 0.5*Z
    X' Y' Z'
end
} def}%
\psSolid[object=cube,
      a=2,ngrid=3](-2,0,1)
\psSolid[object=cube,
      a=2,transform=XYZscale,
      ngrid=3](2,0,1)
\psSolid[object=cube,
      action=draw,
      a=2,ngrid=3](2,0,1)
\end{pspicture}
\end{LTXexample}
Il peut être amusant d'appliquer une telle transformation à une sphère, voici le résultat : la sphère ressemble maintenant à un ballon de rugby !
\begin{LTXexample}[pos=t]
\psset{SphericalCoor,viewpoint=20 60 20,lightsrc=10 15 7,Decran=20}
\begin{pspicture}(-5,-5)(6,5)
\psframe(-5,-4)(6,5)
\psSolid[object=grille,base=-4 4 -4 4]%
\axesIIID(0,0,0)(4,4,4)%
\pstVerb{
/XYZscale {
4 dict begin
   /M defpoint3d % on récupère les coordonnées
   /X' M pop pop 0.75 mul def % X' = 0.75*X
   /Y' M pop 2 mul exch pop def % Y' = 2*Y
   /Z' M 0.75 mul 3 -2 roll pop pop def % Z' = 0.75*Z
    X' Y' Z'
end} def}%
\psSolid[object=sphere,
      r=2,ngrid=18 18](-2,0,2)
\psSolid[object=sphere,
      r=2,transform=XYZscale,
      ngrid=18 18](2,0,2)
\psSolid[object=sphere,
      action=draw,
      r=2,ngrid=18 18](2,0,2)
\end{pspicture}
\end{LTXexample}
Un autre (mal)traitement pour en faire une crêpe ou bien une soucoupe volante~!
\begin{LTXexample}[pos=t]
\psset{SphericalCoor,viewpoint=20 60 20,lightsrc=10 15 7,Decran=20}
\begin{pspicture}(-5,-5)(6,5)
\psframe(-5,-4)(6,5)
\psSolid[object=grille,base=-4 4 -4 4]%
\axesIIID(0,0,0)(4,4,4)%
\pstVerb{
/XYZscale {
4 dict begin
   /M defpoint3d % on récupère les coordonnées
   /X' M pop pop 2 mul def % X' = 02*X
   /Y' M pop 2 mul exch pop def % Y' = 2*Y
   /Z' M 0.2 mul 3 -2 roll pop pop def % Z' = 0.2*Z
    X' Y' Z'
end} def}%
\psSolid[object=sphere,
      r=2,transform=XYZscale,
      ngrid=18 36](0,0,2)
\end{pspicture}
\end{LTXexample}
\subsection{Transformation liée à la distance du point à l'origine}
\[
\left\{
\begin{array}{rcl}
x'&=&\big(0.5\sqrt{x^2+y^2+z^2}+1-0.5\sqrt{3}\big)x\\
y'&=&\big(0.5\sqrt{x^2+y^2+z^2}+1-0.5\sqrt{3}\big)y\\
z'&=&\big(0.5\sqrt{x^2+y^2+z^2}+1-0.5\sqrt{3}\big)z
\end{array}
\right.
\]
\begin{LTXexample}[pos=t]
\begin{pspicture}(-3,-4)(3,3)
\psset{SphericalCoor,viewpoint=20 60 20,lightsrc=10 15 7,Decran=20}
\pstVerb{
/gro {
4 dict begin
   /M defpoint3d
   /a .5 def
   /b 1 a 3 sqrt mul sub def
   /k M norme3d a mul b add def
   M k mulv3d
end
} def}%
\psframe*(-3,-4)(3,3)
\psset{linewidth=.02,linecolor=gray}
\psSolid[object=cube,a=3,ngrid=9,
      transform=gro]%
\end{pspicture}
\end{LTXexample}
\newpage
\subsection{Torsion d'une poutre}
Le solide de départ est un prisme de hauteur 10 cm de 20 étages (\texttt{ngrid=20 2}). À chaque étage, on applique une rotation supplémentaire
d'axe $Oz$ et de valeur 10$^{\mathrm{o}}$ par exemple. Comme les niveaux sont espacés de $0,5$~cm, on multiplie $z\times20$.
 
\begin{LTXexample}[pos=t]
\psset{SphericalCoor,viewpoint=50 50 20,lightsrc=25 37 17,Decran=50,unit=0.75}
\begin{pspicture}(-3,-1)(3.5,10)
\psframe(-3,-1)(3,10)
\psSolid[object=grille,base=-2 2 -2 2,ngrid=8]%
\psSolid[object=prisme,h=10,ngrid=20 2,
        base=0.5 0 0.5 0.5 0 0.5 -0.5 0.5 -0.5 0 -0.5 -0.5 0 -0.5 0.5 -0.5]%
\end{pspicture}
\begin{pspicture}(-3.5,-1)(3,10)
\psframe(-3,-1)(3,10)
\psSolid[object=grille,base=-2 2 -2 2,ngrid=8]%
\pstVerb{
/torsion {
2 dict begin
   /M defpoint3d % on récupère les coordonnées
   /AngleTorsion M 20 mul 3 -2 roll pop pop def
   % on tourne de 10 degrés à chaque niveau
    M 0 0 AngleTorsion rotateOpoint3d
end} def}%
\psSolid[object=prisme,h=10,ngrid=20 2,
        base=0.5 0 0.5 0.5 0 0.5 -0.5 0.5 -0.5 0 -0.5 -0.5 0 -0.5 0.5 -0.5,
        transform=torsion]%
\end{pspicture}
\end{LTXexample}
\subsection{Torsion d'une sphère}
On peut appliquer cette torsion au maillage d'une sphère :
\begin{LTXexample}[pos=t]
\psset{SphericalCoor,viewpoint=50 50 20,lightsrc=25 10 30,Decran=50,unit=0.75}
\begin{pspicture}(-3,-1)(3.5,5)
\psframe(-3,-1)(3,5)
\psSolid[object=grille,base=-2 2 -2 2,ngrid=8]%
\psSolid[object=sphere,r=2,ngrid=20 40](0,0,2)%
\end{pspicture}
\begin{pspicture}(-3.5,-1)(3,5)
\psframe(-3,-1)(3,5)
\psSolid[object=grille,base=-2 2 -2 2,ngrid=8]%
\pstVerb{
/torsion {
2 dict begin
   /M defpoint3d % on récupère les coordonnées
   /AngleTorsion M 20 mul 3 -2 roll pop pop def
   % on tourne de 10 degrés à chaque niveau
    M 0 0 AngleTorsion rotateOpoint3d
end} def}%
\psSolid[object=sphere,r=2,ngrid=20 40,transform=torsion](0,0,2)
\end{pspicture}
\end{LTXexample}
\subsection{Transformation de Nerfertiti}
Une autre vision de Nefertiti, l'aimerez-vous mieux ainsi ?
\begin{LTXexample}[pos=t]
\psset{unit=0.5}
\definecolor{AntiqueWhite}{rgb}{0.98,0.92,0.84}
\begin{pspicture}(-7,-7)(7,9)
\pstVerb{
/XYZscale {
4 dict begin
   /M defpoint3d % on récupère les coordonnées
   /X' M pop pop 2.5 mul def % X' = 2.5*X
   /Y' M pop 2 mul exch pop def % Y' = 2*Y
   /Z' M 1.5 mul 3 -2 roll pop pop def % Z' = 1.5*Z
    X' Y' Z'
end} def}%
\psset{lightsrc=30 -40 10}
\psframe*(-7,-7)(7,9)
\psset{SphericalCoor,viewpoint=50 -80 10,Decran=30,linewidth=0.5\pslinewidth}
\psset{RotX=90,RotZ=30,sommets= (sommets_nefer.dat) run}
\psSolid[object=new,fillcolor=AntiqueWhite,
    faces={(faces_nefer.dat) run},transform=XYZscale]%
\psSolid[object=new,fillcolor=red,
    faces={(faces_nefer_levres.dat) run},transform=XYZscale]%
\psSolid[object=new,fillcolor=black,
    faces={(faces_nefer_sourcils.dat) run},transform=XYZscale]%
\end{pspicture}
\end{LTXexample}
\newpage
\section{Les options \texttt{[inhue]} et \texttt{[inouthue]}}
Pour colorier les faces d'un solide nous disposions de deux options pour l'extérieur :
\begin{itemize}
  \item \texttt{[fillcolor]}
  \item \texttt{[hue]}
\end{itemize}
et d'une seule pour l'intérieur :
\begin{itemize}
  \item \texttt{[incolor]}
\end{itemize}
Les détails de ces options sont détaillées dans la documentation générale du package.
 
Nous avons, à présent, deux nouvelles options :
\begin{itemize}
  \item \texttt{[inhue]}
\end{itemize}
qui permet de colorier les faces intérieures avec les mêmes paramètres que \texttt{[hue]} et,
\begin{itemize}
  \item \texttt{[inouthue]}
\end{itemize}
qui peindra dans la continuité faces intérieurs et intérieures avec les paramètres de \texttt{[hue]}. On rappelle
que pour voir les faces intérieures il faut activer l'option \Cadre{hollow}, comme dans les deux exemples suivants.
 
\begin{LTXexample}[width=6cm]
\psset{lightsrc=45 15 20,SphericalCoor=true,
       viewpoint=50 20 20,Decran=50}
\begin{pspicture}(-3,-3)(3,3)
\psframe(-3,-3)(3,3)
\psSolid[object=cube,
         a=3,ngrid=3,
         hollow,
         inouthue=0 1 0.5 1,
         rm=36 37 38 39 40 41 42 43 44]%
\end{pspicture}
\end{LTXexample}
 
\begin{LTXexample}[width=6.5cm]
\psset{unit=0.5}
\psset{lightsrc=30 30 25}
\psset{SphericalCoor,viewpoint=50 40 30,Decran=50}
\begin{pspicture}(-6,-8)(7,8)
\psSurface[ngrid=.25 .25,inouthue=1 0 0.5 1,
    linewidth=0.5\pslinewidth,axesboxed,
    algebraic](-4,-4)(4,4){%
    ((y^2)-(x^2))/4 }
\end{pspicture}
\end{LTXexample}
 
Pour colorier avec les paramètres de \texttt{[hue]} les faces intérieures et extérieures on utilisera l'option \texttt{[hue]} pour
l'extérieur et l'option \texttt{[inhue]} pour l'intérieur, comme dans l'exemple suivant :
 
\begin{LTXexample}[width=8.5cm]
\psset{unit=0.5}
\begin{pspicture}(-7,-7)(10,12)
\psframe(-7,-7)(10,12)
\psset[pst-solides3d]{viewpoint=20 5 10,
      Decran=50,lightsrc=20 10 5}
\psSolid[object=grille,base=-2 2 -2 2,
         linecolor=white](0,0,-2)
 % Parametric Surfaces
\defFunction{cone}(u,v){u v Cos mul}{u v Sin mul}{u}
\psSolid[object=surfaceparametree,
         base=-2 2 0 2 pi mul,
%         inouthue=0 1,
        inhue=0.8 0.2,hue=0.8 0.2, % problème !
        function=cone,linewidth=0.5\pslinewidth,ngrid=25 40]%
\psgridIIID[Zmin=-2,Zmax=2](-2,2)(-2,2)
\end{pspicture}
\end{LTXexample}
\section{Les objets \texttt{vecteur} et \texttt{ligne}}
\subsection{Définitions}
L'objet \Cadre{vecteur} dessine un vecteur en 3 dimensions dont la pointe est un cône. Les coordonnées
du sommet sont contenues dans le paramètre \Cadre{[args=x y z]} qui dessinera un vecteur d'origine $O$ et d'extrémité le point de coordonnées $(x,y,z)$.
 
Ce vecteur peut subir une translation déterminée par les coordonnées de la position du solide. Ce vecteur étant interprété comme un solide
pourra aussi subir des rotations avec les paramètres \texttt{RotX= etc.}.
 
La taille du vecteur est modifiable avec l'option \texttt{transform}, par exemple \Cadre{[transform={2 mulv3d}]} multiplie la taille de la flèche par 2.
 
L'objet \Cadre{ligne} dessine une ligne brisée dont les coordonnées des points sont donnés dans l'ordre dans le paramètre \Cadre{[base=x0 y0 z 0 x1 y1 z1 \ldots xn yn zn]}.
 
\begin{LTXexample}[width=4cm]
\psset{SphericalCoor=true,viewpoint=50 -20 30,Decran=50}
\begin{pspicture}(-1,-2)(3,5)
\psframe(-1,-2)(3,5)
\psSolid[object=vecteur,
      args=0 0 2,
      transform={2 mulv3d},
      linecolor=red]%
\psSolid[object=vecteur,
      args=2 0 0,linecolor=orange]%
\psSolid[object=vecteur,
      args=0 2 0,linecolor=blue]%
\psSolid[object=vecteur,
      args=2 2 2]%
\psSolid[object=ligne,linestyle=dashed,
      base=2 2 2
           2 2 0
           0 2 0]%
\psSolid[object=ligne,linecolor=magenta,
      base=2 2 0
           2 0 0]%
\end{pspicture}
\end{LTXexample}
 
Les applications sont variées, on pourra par exemple faire un quadrillage 3D avec les axes représentés par ces vecteurs : voir la macro \verb+\psgridIIID+ utilisée dans l'exemple sur les options \texttt{[inhue]} et \texttt{[hue]} et qui est définie dans le préambule du document ou bien tracer la normale en différents points d'une surface comme dans les deux exemples suivants.
\subsection{Normale à une sphère}
La normale à la surface de la sphère est prédéfinie dans une commande :
\begin{verbatim}
\def\NormalSphere#1#2#3{%
% #1 rayon
% #2 longitude
% #3 latitude
\pstVerb{/latitude #3 def
         /longitude #2 def
         /Rayon #1 def
         /rotY latitude neg def
         /rotZ longitude def
         /xP Rayon longitude cos latitude cos mul mul def
         /yP Rayon longitude sin latitude cos mul mul def
         /zP Rayon latitude sin mul def}%
\psSolid[object=vecteur,RotZ=rotZ,RotY=rotY,
         args=1 0 0](xP,yP,zP)}
\end{verbatim}
\def\NormalSphere#1#2#3{%
% #1 rayon
% #2 longitude
% #3 latitude
\pstVerb{/latitude #3 def
         /longitude #2 def
         /Rayon #1 def
         /rotY latitude neg def
         /rotZ longitude def
         /xP Rayon longitude cos latitude cos mul mul def
         /yP Rayon longitude sin latitude cos mul mul def
         /zP Rayon latitude sin mul def}%
\psSolid[object=vecteur,RotZ=rotZ,RotY=rotY,
         args=1 0 0](xP,yP,zP)}%
\begin{LTXexample}[width=8cm]
\psset{SphericalCoor=true,viewpoint=50 -20 30,Decran=50}
\begin{pspicture}(-4,-4)(4,4)
\psframe(-4,-4)(4,4)
\psSolid[object=sphere,r=3,ngrid=20 36,linecolor=blue,
   tracelignedeniveau=true,
   hauteurlignedeniveau=0,
   linewidthlignedeniveau=2,
   couleurlignedeniveau=red]%
\NormalSphere{3}{30}{60}%
\NormalSphere{3}{0}{90}%
\NormalSphere{3}{0}{0}%
\NormalSphere{3}{-45}{0}%
\NormalSphere{3}{-70}{0}%
{\psset{linecolor=red}\NormalSphere{3}{0.33}{46.6}}
%\psSolid[object=ligne,
%         base=0 0 0 xP yP zP,
%         linecolor=red,linestyle=dashed]%
\psPoint(xP,yP,zP){P}
\psdot[linecolor=red](P)
\uput[dr](P){\Cadre{Poitiers}}
\end{pspicture}
\end{LTXexample}
\subsection{Normale en un point d'une une surface définie par $z=f(x,y)$}
On prend la surface d'équation $z=2\sin x\sin y$.
\def\NormalSin#1#2{%
% #1 x
% #2 y
\pstVerb{%
         /xP #1 def
         /yP #2 def
         /zP 2 #1 Sin mul #2 Sin mul def
         /normaleX 2 #1 Cos mul #2 Sin mul neg def
         /normaleY 2 #2 Cos mul #1 Sin mul neg def
%         /normaleZ 1 def
         /Norme normaleX dup mul normaleY dup mul add 1 add sqrt def
         /Nx normaleX Norme div def
         /Ny normaleY Norme div def
         /Nz 1 Norme div def}%
\psSolid[object=vecteur,args=Nx Ny Nz](xP,yP,zP)}
\begin{LTXexample}[width=6cm]
\psset{SphericalCoor=true,viewpoint=50 20 20,Decran=50}
\begin{pspicture}(-3,-3)(3,4)
\psframe(-3,-3)(3,3)
\psSurface[algebraic,
            ngrid=.2 .2,
            incolor=yellow!20,fillcolor=blue!20](-3,-3)(3,3){2*sin(x)*sin(y)}%
\psset{linecolor=red}%
\NormalSin{1.57}{0.75}%
\psset{linecolor=blue}%
\NormalSin{1.57}{1.57}%
\psset{linecolor=green}%
\NormalSin{2}{1.57}%
\psset{linecolor=magenta}%
\NormalSin{-1.57}{-1.57}%
\end{pspicture}
\end{LTXexample}
\newpage
\section{Inclure un objet 3D de type .obj : \texttt{object=objfile}}
Ce sont des fichiers très utilisés dans le domaine de la 3D et qu'on trouve en abondance sur internet. On veillera à supprimer tous les commentaires \texttt{\#} du fichier original et ne conserver que les sommets : ce sont les lignes
qui commencent par \texttt{v} et les faces, lignes commençant par \texttt{f}.
 
Les fichiers trop volumineux ne seront pas pris en compte car le nombre maximal d'éléments pour un tableau \texttt{postscript} est 65535. Donc il faut que le nombre de sommets soit inférieur à 21845.
 
\begin{LTXexample}[width=6cm]
\psset{SphericalCoor,viewpoint=20 15 10,Decran=20}
\begin{pspicture}(-3,-4)(3,3)
\psframe*[linecolor=cyan!50](-3,-4)(1,3)
\psSolid[object=objfile,
         unit=20,RotX=60,
         file=rocket.obj]%
\end{pspicture}
\end{LTXexample}
\newpage
\section{Objet : \texttt{[object=polygoneregulier]}}
\texttt{[object=polygoneregulier]} dessine un polygone régulier double face, dont le nombre de côtés est fixé par
le paramètre \texttt{[ngrid=n]}, inscrit dans un cercle de rayon déterminé par \texttt{[r=valeur]}. Comme tous les solides,
cet objet peut subir les rotations \texttt{[RotX=valeur,RotY=\ldots]} et les translations.
 
%\psset{unit=0.8}
\psset{lightsrc=10 0 10,SphericalCoor=true,viewpoint=50 20 30,Decran=50}
\begin{LTXexample}[pos=t]
\begin{pspicture}(-7,-5)(6,4)
\psframe(-7,-5)(6,4)
\defFunction[algebraic]{f1}(x){3*cos(x)+3}{3*sin(x)}{}
\psProjection[object=courbeR2,
   range=-3.14 3.14,linecolor=yellow,
   normal=0 0 1,function=f1]%
\defFunction[algebraic]{f2}(x){3*cos(x)-3}{3*sin(x)}{}
\psProjection[object=courbeR2,
   range=-3.14 3.14,linecolor=red,
   normal=0 0 1,function=f2]%
\psSolid[object=polygoneregulier,fillcolor=red!50,incolor=yellow,
      r=3,ngrid=6](-3,0,0)
\psSolid[object=polygoneregulier,fillcolor=red!50,incolor=yellow,
      r=3,ngrid=6,RotX=180](3,0,0)
\psSolid[object=grille,base=-6 6 -4 4,action=draw,linewidth=0.5\pslinewidth]%
\psSolid[object=vecteur,args=0 0 2,
      transform={2 mulv3d},linecolor=red]%
\psSolid[object=vecteur,args=0 2.5 0,
      transform={2 mulv3d},linecolor=blue]%
\psSolid[object=vecteur,args=3.5 0 0,
      transform={2 mulv3d},linecolor=green]%
\psPoint(0,0,4){Z}\uput[u](Z){$z$}
\psPoint(7,0,0){X}\uput[dl](X){$x$}
\psPoint(0,5,0){Y}\uput[r](Y){$y$}
\rput(0,-4.5){\Cadre{hexagone double face : ngrid=6}}
\end{pspicture}
\end{LTXexample}
\end{document}