Vue en 3D (package pst-vue3D.tex)

Jean-Michel Sarlat (jsarlat@planete.net)

Le package pst-vue3D.tex écrit par Manuel Luque permet la représentation d'objets en 3D avec PSTricks. Ce document reprend les illustrations de la documentation de Manuel en les accompagnant de leur code source.
Toutes les figures sont obtenues en utilisant un document maîtrefigN.tex est successivement remplacé par le nom du fichier présenté au dessus de chaque figure. Ce document embarque un certain nombre de définitions utilisées dans la description des figures.
La documentation du package pst-vue3D.tex

Un dé

Fichier : fig1.tex

\begin{pspicture}(-1,-1)(1,1)
\psset{THETA=70,PHI=30,Dobs=100,Decran=10}
\psset{A=5,B=5,C=A,fillstyle=solid,fillcolor=GrisClair,linecolor=red}
\Die
\end{pspicture}

Rotation du dé autour de Oz

Fichier : fig2.tex

\multido{\iRotZ=0+45}{8}{
\begin{pspicture}(-1.5,-1.5)(1.5,1.5)
\psset{THETA=70,PHI=30,Dobs=200,Decran=10}
\psset{A=5,B=5,C=A,fillstyle=solid,fillcolor=GrisClair,linecolor=red}
\psset{RotZ=\iRotZ}
\tapis
\Die
\axeOZ
\uput[180](Z'){\texttt{RotZ=\iRotZ}}
\end{pspicture}\hfill}

Parallèlipipède en rotation autour de Ox

Fichier : fig3.tex

\psset{THETA=-10,PHI=20,Dobs=200,Decran=10}
\multido{\iCX=0+30}{8}{
\begin{pspicture}(-1.5,-1.5)(1.5,1.5)
% point défini par ses coordonnées (x,y,z)
% \PointThreeD(x,y,z){name}
\PointThreeD(0,0,0){O}
\PointThreeD(0,0,20){Z}
\PointThreeD(50,0,0){X}
\PointThreeD(0,20,0){Y}
\psset{A=20,B=5,C=10,fillstyle=solid,fillcolor=LightBlue,linecolor=gray}
\psset{CX=0,CZ=0,CY=0,RotZ=0,RotY=0,RotX=\iCX}
\Cube
\psset{linestyle=dashed}
\psline(O)(Z)
\psline(O)(X)
\psline(O)(Y)
\uput[0](Z){Z}
\uput[0](X){X}
\uput[0](Y){Y}
\end{pspicture}\hfill}

Sphère

Fichier : fig4.tex

\psset{THETA=60,PHI=30,Dobs=100,Decran=10}
\begin{pspicture}(-3,-4)(3,5)
% CX,CY,CZ coordonnées centre de l'objet
% \SphereThreeD[CX=...,CY=...,CZ=...]{rayon}
\psset{CX=0,CZ=0,CY=0}
{\psset{fillstyle=gradient,gradbegin=white,gradend=blue,
gradmidpoint=0.2,linecolor=cyan,linewidth=0.1mm}
\SphereThreeD{20}}
% PhiCercle=latitude du cercle
% \SphereCercle[PhiCercle=...]{rayon}
\psset{linecolor=red,PhiCercle=45}
\SphereCercle{20}
% ThetaMeridien=longitude du méridien
% \SphereMeridien[ThetaMeridien=...]{rayon}
\SphereMeridien[ThetaMeridien=45]{20}
% \PointLongitudeLatitude{rayon}{longitude}{latitude}{nom du point}
\PointLongitudeLatitude{20}{45}{45}{A}
\PointLongitudeLatitude{40}{45}{45}{B}
\psline[linecolor=magenta]{->}(A)(B)
\PointLongitudeLatitude{20}{0}{90}{Nord}
\PointLongitudeLatitude{40}{0}{90}{Nord1}
\psline[linecolor=magenta]{->}(Nord)(Nord1)
\SphereCercle[PhiCercle=0]{20}
\SphereMeridien[ThetaMeridien=0]{20}
\end{pspicture}

Hémisphère

Fichier : fig5.tex

\begin{pspicture}(-3,-4)(3,5)
% CX,CY,CZ coordonnées centre de l'objet
% \DemiSphereThreeD[CX=...,CY=...,CZ=...]{rayon}
\psset{CX=0,CZ=0,CY=0}
\psset{fillstyle=gradient,gradbegin=cyan,gradend=magenta,
gradmidpoint=0,linecolor=red,linewidth=0.1mm}
\DemiSphereThreeD[RotY=90]{20}
\end{pspicture}

Demi-sphères creuses

Fichier : fig6.tex

\begin{pspicture}(-3,-4)(3,5)
\psset{THETA=185,PHI=0,Dobs=100,Decran=10}
% CX,CY,CZ coordonnées centre de l'objet
% \SphereThreeD[CX=...,CY=...,CZ=...]{rayon}
\psset{fillstyle=gradient,gradbegin=white,gradend=blue,
gradmidpoint=0.2,linecolor=cyan,linewidth=0.1mm}
\DemiSphereThreeD[CZ=-5,RotX=180,RotY=-10]{20}
\DemiSphereThreeD[CZ=5,RotY=10]{20}
\psset{fillstyle=gradient,gradbegin=white,gradend=red,
gradmidpoint=0.2,linecolor=cyan,linewidth=0.1mm}
\SphereCreuse[CZ=-5,RotX=180,RotY=-10]{20}
\SphereCreuse[CZ=5,RotY=10]{20}
\end{pspicture}

Cylindres

Fichier : fig7.tex

\begin{pspicture}(-5,-4)(5,5)
\psset{THETA=65,PHI=40,Dobs=150,Decran=10}
% plan horizontal
{\psset{normaleLongitude=0,
                normaleLatitude=90,
                Xorigine=0,
                Yorigine=0,
                Zorigine=0}
\FrameThreeD[fillstyle=solid,fillcolor=cyan](-50,0)(50,50)
\FrameThreeD[fillstyle=solid,fillcolor=OrangePale](-50,0)(50,-50)
\QuadrillageThreeD[linecolor=green,linewidth=0.2mm,grille=10,
                  Ymin=-50,Ymax=50,Xmax=50,Xmin=-50]}
{\psset{fillstyle=gradient,gradbegin=white,gradend=red,
        gradmidpoint=0.2,linewidth=0.1mm}
\multido{\iCY=-45+90}{2}{
\CylindreThreeD[CX=-45,CY=\iCY,CZ=0]{5}{50}
\DemiSphereThreeD[CX=-45,CZ=50,CY=\iCY,fillstyle=gradient,
                  gradbegin=white,gradend=yellow]{5}}
{\psset{CX=0,CY=0,CZ=0}
\CylindreThreeD{10}{15}
\psset{CX=0,CY=0,CZ=15}
\CylindreThreeD{20}{5}}
{\psset{fillstyle=gradient,gradbegin=white,gradend=blue,
gradmidpoint=0.2,linecolor=cyan,linewidth=0.1mm}
\DemiSphereThreeD[CZ=35,RotX=180]{20}}
{\psset{fillstyle=gradient,gradbegin=white,gradend=red,
gradmidpoint=0.2,linecolor=cyan,linewidth=0.1mm}
\SphereCreuse[CZ=35,RotX=180]{20}}
{\psset{CX=15,CY=15,CZ=5,RotY=90,RotX=0,RotZ=30}
\CylindreThreeD{5}{20}}
\multido{\iCY=-45+90}{2}{
\CylindreThreeD[CX=45,CY=\iCY,CZ=0]{5}{50}
\DemiSphereThreeD[CX=45,CZ=50,CY=\iCY,fillstyle=gradient,gradbegin=white,
                   gradend=yellow,linestyle=none]{5}}}
\end{pspicture}

Plans et quadrillages

Fichier : fig8.tex

\psset{THETA=-10,PHI=10,Dobs=200,Decran=10}
\begin{pspicture}(-5,-2)(5,4)
% plan de front
{\psset{normaleLongitude=180,
                normaleLatitude=0,
                Xorigine=0,
                Yorigine=0,
                Zorigine=0}
\FrameThreeD[fillstyle=solid,fillcolor=OrangePale](-50,-50)(50,50)
\QuadrillageThreeD[linecolor=blue,linewidth=0.2mm,grille=10,
                  Ymin=-50,Ymax=50,Xmax=50,Xmin=-50]}
% plan vertical de gauche
{\psset{normaleLongitude=90,
                normaleLatitude=0,
                Xorigine=0,
                Yorigine=50,
                Zorigine=0}
\FrameThreeD[fillstyle=solid,fillcolor=yellow](0,-50)(50,50)
\QuadrillageThreeD[linecolor=blue,linewidth=0.2mm,grille=10,
                  Ymin=-50,Ymax=50,Xmax=50,Xmin=0]}
% plan vertical à droite
{\psset{normaleLongitude=90,
                normaleLatitude=0,
                Xorigine=0,
                Yorigine=-50,
                Zorigine=0}
\FrameThreeD[fillstyle=solid,fillcolor=yellow](0,-50)(50,50)
\QuadrillageThreeD[linecolor=red,linewidth=0.2mm,grille=10,
                  Ymin=-50,Ymax=50,Xmax=50,Xmin=0]}
% plan horizontal
{\psset{normaleLongitude=0,
                normaleLatitude=90,
                Xorigine=0,
                Yorigine=0,
                Zorigine=0}
\FrameThreeD[fillstyle=solid,fillcolor=cyan](-50,0)(50,50)
\QuadrillageThreeD[linecolor=green,linewidth=0.2mm,grille=10,
                  Ymin=0,Ymax=50,Xmax=50,Xmin=-50]}
\PointThreeD(0,0,0){O}
\PointThreeD(0,0,100){Z}
\PointThreeD(100,0,0){X}
\PointThreeD(0,100,0){Y}
{\psset{linecolor=red,linestyle=dashed}
\psline(O)(Z)
\psline(O)(X)
\psline(O)(Y)}
\uput[0](Z){Z}
\uput[0](X){X}
\uput[0](Y){Y}
\end{pspicture}

Points et droites

Fichier : fig9.tex

\psset{THETA=70,PHI=30,Dobs=150,Decran=10}
\begin{center}
\begin{pspicture}(-5,-2)(5,4)
\PointThreeD(0,0,0){O}
\PointThreeD(0,0,60){Z}
\PointThreeD(60,0,0){X}
\PointThreeD(0,60,0){Y}
{\psset{linecolor=red,linestyle=dashed}
\psline(O)(Z)
\psline(O)(X)
\psline(O)(Y)}
\uput[0](Z){Z}
\uput[0](X){X}
\uput[0](Y){Y}
\PointThreeD(25,-25,25){A}
\PointThreeD(25,25,25){B}
\PointThreeD(25,25,-25){C}
\PointThreeD(25,-25,-25){D}
\PointThreeD(-25,-25,25){E}
\PointThreeD(-25,25,25){F}
\PointThreeD(-25,25,-25){G}
\PointThreeD(-25,-25,-25){H}
\pspolygon(A)(B)(C)(D)
\pspolygon(E)(F)(G)(H)
\psline(A)(E)
\psline(B)(F)
\psline(C)(G)
\psline(D)(H)
\psset{linestyle=dashed}
\psline(A)(G)
\psline(B)(H)
\psline(C)(E)
\psline(D)(F)
% routine page 49 in présentation de PSTricks
% D.Girou cahier 16 Gutengerg
\newcounter{lettre}
\multido{\i=1+1}{8}{
\setcounter{lettre}{\i}
\psdot[linecolor=red](\Alph{lettre})
\uput[90](\Alph{lettre}){\Alph{lettre}}
}
\end{pspicture}

Cercles

Fichier : fig10.tex

\psset{THETA=80,PHI=50,Dobs=120,Decran=10}
\begin{pspicture}(-5,-6)(5,1)
\multido{\iX=-70+10}{15}{
\PointThreeD(\iX,0,0){X1}
\PointThreeD(\iX,50,0){X2}
\psline(X1)(X2)}
\multido{\iY=0+10}{6}{
\PointThreeD(-70,\iY,0){Y1}
\PointThreeD(70,\iY,0){Y2}
\psline(Y1)(Y2)}
\psset{normaleLongitude=0,normaleLatitude=90,Zorigine=0}
\multido{\iXorigine=-65+10}{14}{
\multido{\iYorigine=5+10}{5}{
\psset{Yorigine=\iYorigine,Xorigine=\iXorigine}
\CircleThreeD[linecolor=red]{5}}}
\end{pspicture}

Objets divers

Fichier : fig11.tex

\psset{THETA=70,PHI=40,Dobs=150,Decran=8}
\begin{pspicture}(-5,-4)(5,8)
% parallélépipède défini par la demi-longueur de ses côtés
% A (suivant OX); B A (suivant OY) ; C (suivant OZ)
% CX, CY, CZ sont les coordonnées du centre
% RotZ=...,RotY=...,RotX=... sont les rotations
% qu'on peut lui faire subir autour des axes.
% La commande s'appelle \Cube
{\psset{A=50,B=5,C=5,fillstyle=solid,fillcolor=GrisClair,linecolor=red}
\psset{CX=0,CZ=5,CY=-5,RotZ=0,RotY=0,RotX=0}
\Cube}
{\psset{A=5,B=5,C=50,fillstyle=solid,fillcolor=GrisClair,linecolor=red}
\psset{CX=0,CZ=60,CY=-5,RotZ=0,RotY=0,RotX=0}
\Cube}
\PointThreeD(0,0,0){O}
\PointThreeD(0,0,120){Z}
\PointThreeD(100,0,0){X}
\PointThreeD(0,60,0){Y}
{\psset{linecolor=red,linestyle=dashed}
\psline(O)(Z)
\psline(O)(X)
\psline(O)(Y)}
\uput[0](Z){Z}
\uput[0](X){X}
\uput[0](Y){Y}
\multido{\iX=-70+10}{15}{
\PointThreeD(\iX,0,0){X1}
\PointThreeD(\iX,50,0){X2}
\psline(X1)(X2)}
\multido{\iY=0+10}{6}{
\PointThreeD(-70,\iY,0){Y1}
\PointThreeD(70,\iY,0){Y2}
\psline(Y1)(Y2)}
\psset{fillstyle=gradient,gradbegin=white,gradend=red,
      gradmidpoint=0.2,linewidth=0.1mm}
% Le cylindre est défini par son rayon, sa hauteur
% les coordonnées du centre de la base CX, CY et CZ
% RotZ=...,RotY=...,RotX=... sont les rotations
% qu'on peut lui faire subir autour des axes.
% \CylindreThreeD{rayon}{hauteur}
{\psset{CX=-60,CY=-5,CZ=0}
\CylindreThreeD{5}{50}}
\multido{\iZ=60+20,\iX=-60+20,\iY=-5+7}{4}{
\psset{fillstyle=gradient,gradbegin=white,gradend=blue,
gradmidpoint=0.2,linecolor=cyan,linewidth=0.1mm,
CX=\iX,CZ=\iZ,CY=\iY}
\SphereThreeD{4}}
{\psset{CZ=0,CY=40,CX=50,RotZ=20,linecolor=black,
        fillstyle=gradient,Rtetraedre=10}
\Tetraedre}
\psset{RotX=0,RotZ=30,RotY=0,CX=-20,CZ=0,CY=25,fillstyle=solid,
        linecolor=black,A=15,Hpyramide=10}
\Pyramide
\psset{linecolor=red,fillstyle=gradient,gradbegin=yellow,
        gradend=red,gradmidpoint=0,linewidth=0.05mm}
{\psset{CX=60,CZ=0,CY=10,fracHcone=0.75}
\ConeThreeD{10}{100}}
\end{pspicture}

Source index.txt mouliné par petitParseur(Z+B) le mercredi 20 novembre 2002.