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ître où figN.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}
|
