summaryrefslogtreecommitdiff
path: root/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex
diff options
context:
space:
mode:
Diffstat (limited to 'obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex')
-rw-r--r--obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex1640
1 files changed, 1640 insertions, 0 deletions
diff --git a/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex
new file mode 100644
index 0000000000..e6ffa14446
--- /dev/null
+++ b/obsolete/graphics/pstricks/contrib/pst-vue3d/pst-vue3d.tex
@@ -0,0 +1,1640 @@
+%% This is file `pst-vue3d.tex',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-vue3d.tex'
+%%
+%% Manuel Luque <Mluque5130@aol.com> (France)
+%% Herbert Voss <voss _at_ pstricks.de (Germany)
+%%
+%% 2008/02/21
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-vue3d' is a PSTricks package to define 3d views
+%% ChangeLog (at end)
+%%
+\csname PSTVueTroisDLoaded\endcsname
+\let\PSTVueTroisDLoaded\endinput
+% Require PSTricks and pst-node packages
+\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
+\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi
+\ifx\PSTthreeDLoaded\endinput\else\input pst-3d.tex\fi
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey\fi
+%
+\def\fileversion{1.24}%
+\def\filedate{2008/02/21}%
+\message{`pst-vue3d v\fileversion, \filedate\space (ML,hv)}%
+\edef\PstAtCode{\the\catcode`\@}\catcode`\@=11\relax
+\pst@addfams{pst-vue3d}% for pst-xkey
+%%%%
+\define@key[psset]{pst-vue3d}{scale}{\def\psk@TroisD@scale{#1}} % echelle
+\define@key[psset]{pst-vue3d}{RotX}{\def\psk@TroisD@RotX{#1}} % rotation autour de Ox en degrés
+\define@key[psset]{pst-vue3d}{RotY}{\def\psk@TroisD@RotY{#1}} % rotation autour de Oy en degrés
+\define@key[psset]{pst-vue3d}{RotZ}{\def\psk@TroisD@RotZ{#1}} % rotation autour de OZ en degrés
+\define@key[psset]{pst-vue3d}{A}{\def\psk@TroisD@A{#1}} % double d'une arête du parallèlépipède
+\define@key[psset]{pst-vue3d}{B}{\def\psk@TroisD@B{#1}} % double d'une arête du parallèlépipède
+\define@key[psset]{pst-vue3d}{C}{\def\psk@TroisD@C{#1}} % double de l'arête du parallèlépipède
+\define@key[psset]{pst-vue3d}{Rtetraedre}{\def\psk@TroisD@Rtetraedre{#1}} % Rayon du cercle tétraèdre
+\define@key[psset]{pst-vue3d}{ColorFaceA}{\def\psk@TroisD@TetraedreColorFaceA{#1}} % couleur de la face A du tétraèdre
+\define@key[psset]{pst-vue3d}{ColorFaceB}{\def\psk@TroisD@TetraedreColorFaceB{#1}} % couleur de la face B du tétraèdre
+\define@key[psset]{pst-vue3d}{ColorFaceC}{\def\psk@TroisD@TetraedreColorFaceC{#1}} % couleur de la face C du tétraèdre
+\define@key[psset]{pst-vue3d}{ColorFaceD}{\def\psk@TroisD@TetraedreColorFaceD{#1}} % couleur de la face D du tétraèdre
+\define@key[psset]{pst-vue3d}{ColorFaceE}{\def\psk@TroisD@TetraedreColorFaceE{#1}} % couleur de la face D du tétraèdre
+\define@key[psset]{pst-vue3d}{fracHeight}{\def\psk@TroisD@fracHeight{#1}} % fraction de la hauteur du cone
+\define@key[psset]{pst-vue3d}{fracHcone}{\def\psk@TroisD@fracHeight{#1}} % for compatibility
+%
+\define@key[psset]{pst-vue3d}{normaleLongitude}{\def\psk@TroisD@normaleLongitude{#1}} % coordonnées angulaires de la normale
+\define@key[psset]{pst-vue3d}{normaleLatitude}{\def\psk@TroisD@normaleLatitude{#1}} % coordonnées angulaires de la normale
+\define@key[psset]{pst-vue3d}{pas}{\def\psk@TroisD@pas{#1}} % en cm résolution du tracé
+\define@key[psset]{pst-vue3d}{grille}{\def\psk@TroisD@grille{#1}} % Pas de la grille en cm
+%
+\define@key[psset]{pst-vue3d}{THETA}{\def\psk@TroisD@Theta{#1}}
+\define@key[psset]{pst-vue3d}{PHI}{\def\psk@TroisD@Phi{#1}}
+\define@key[psset]{pst-vue3d}{DeltaTHETA}{\def\psk@TroisD@DeltaTheta{#1}}
+\define@key[psset]{pst-vue3d}{DeltaPHI}{\def\psk@TroisD@DeltaPhi{#1}}
+\define@key[psset]{pst-vue3d}{PortionSphereTHETA}{\def\psk@TroisD@PortionSphereTHETA{#1}}
+\define@key[psset]{pst-vue3d}{PortionSpherePHI}{\def\psk@TroisD@PortionSpherePHI{#1}}
+\define@key[psset]{pst-vue3d}{PhiCercle}{\def\psk@TroisD@PhiCercle{#1}}
+\define@key[psset]{pst-vue3d}{ThetaMeridien}{\def\psk@TroisD@ThetaMeridien{#1}}
+\define@key[psset]{pst-vue3d}{Dobs}{\def\psk@TroisD@Dobs{#1}}
+\define@key[psset]{pst-vue3d}{Decran}{\def\psk@TroisD@Ecran{#1}}
+%
+\psset[pst-vue3d]{THETA=30,PHI=10,%
+ Dobs=100,Decran=10,%
+ normaleLongitude=45,%
+ normaleLatitude=45,%
+ PhiCercle=0,%
+ ThetaMeridien=0,%
+ pas=1,%
+ grille=10,%
+ scale=1,%
+ RotX=0,RotY=0,RotZ=0,%
+ A=10,B=10,C=10,%
+ Rtetraedre=5,%
+ ColorFaceD=cyan,ColorFaceA=magenta,ColorFaceB=red,%
+ ColorFaceC=blue,ColorFaceE=yellow,%
+ fracHeight=1,%
+ DeltaTHETA=10,DeltaPHI=10,%
+ PortionSphereTHETA=0,PortionSpherePHI=0}
+% ajout du 28 août 2003
+% colorier au choix les faces du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceOne}{\def\psk@TroisD@CubeColorFaceOne{#1}} % couleur de la face 1 du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceTwo}{\def\psk@TroisD@CubeColorFaceTwo{#1}} % couleur de la face 2 du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceThree}{\def\psk@TroisD@CubeColorFaceThree{#1}} % couleur de la face 3 du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceFour}{\def\psk@TroisD@CubeColorFaceFour{#1}} % couleur de la face 4 du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceFive}{\def\psk@TroisD@CubeColorFaceFive{#1}} % couleur de la face 5 du cube
+\define@key[psset]{pst-vue3d}{CubeColorFaceSix}{\def\psk@TroisD@CubeColorFaceSix{#1}} % couleur de la face 6 du cube
+\psset[pst-vue3d]{CubeColorFaceOne= 1 1 0 ,
+ CubeColorFaceTwo= 0.9 0.9 0 ,
+ CubeColorFaceThree= 0.8 0.8 0 ,
+ CubeColorFaceFour= 0.7 0.7 0 ,
+ CubeColorFaceFive= 0.6 0.6 0 ,
+ CubeColorFaceSix= 0.5 0.5 0 }
+% fin 28 août 2003
+% ajout 27 octobre 2003
+\define@boolkey[psset]{pst-vue3d}[Pst@]{CubeInside}[true]{}
+\psset[pst-vue3d]{CubeInside=false}
+% hv 2003-12-20
+\define@boolkey[psset]{pst-vue3d}[Pst@]{SphericalCoor}[true]{}
+\psset[pst-vue3d]{SphericalCoor=false}
+%
+\def\variablesTroisD{%
+ 0 0 translate
+% hv 2005-04-30 --->beg
+ /xUnit \pst@number\psxunit def
+ /yUnit \pst@number\psyunit def
+% hv 2005-04-30 <---end
+ /reduction \psk@TroisD@scale\space def
+ /RotX \psk@TroisD@RotX\space def
+ /RotY \psk@TroisD@RotY\space def
+ /RotZ \psk@TroisD@RotZ\space def
+ /A \psk@TroisD@A\space def
+ /B \psk@TroisD@B\space def
+ /C \psk@TroisD@C\space def
+ /RayonBaseTetraedre \psk@TroisD@Rtetraedre\space def
+ /fracHeight \psk@TroisD@fracHeight\space def
+ /Rpoint A 4 div def
+ /nTheta \psk@TroisD@normaleLongitude\space def
+ /nPhi \psk@TroisD@normaleLatitude\space def
+ /S1 \psk@TroisD@normaleLongitude\space sin def
+ /C1 \psk@TroisD@normaleLongitude\space cos def
+ /S2 \psk@TroisD@normaleLatitude\space sin def
+ /C2 \psk@TroisD@normaleLatitude\space cos def
+ /THETA \psk@TroisD@Theta\space def
+ /PHI \psk@TroisD@Phi\space def
+ /dTHETA \psk@TroisD@DeltaTheta\space def
+ /dPHI \psk@TroisD@DeltaPhi\space def
+ /psTHETA \psk@TroisD@PortionSphereTHETA\space def
+ /psPHI \psk@TroisD@PortionSpherePHI\space def
+ /PhiCercle \psk@TroisD@PhiCercle\space def
+ /ThetaMeridien \psk@TroisD@ThetaMeridien\space def
+ /Dobs \psk@TroisD@Dobs\space def
+ /DScreen \psk@TroisD@Ecran\space def
+ /Sin1 THETA sin def
+ /Sin2 PHI sin def
+ /Cos1 THETA cos def
+ /Cos2 PHI cos def
+ /Cos1Sin2 Cos1 Sin2 mul def
+ /Sin1Sin2 Sin1 Sin2 mul def
+ /Cos1Cos2 Cos1 Cos2 mul def
+ /Sin1Cos2 Sin1 Cos2 mul def
+ /XpointVue Dobs Cos1Cos2 mul def
+ /YpointVue Dobs Sin1Cos2 mul def
+ /ZpointVue Dobs Sin2 mul def
+ /M11 RotZ cos RotY cos mul def
+ /M12 RotZ cos RotY sin mul RotX sin mul
+ RotZ sin RotX cos mul sub def
+ /M13 RotZ cos RotY sin mul RotX cos mul
+ RotZ sin RotX sin mul add def
+ /M21 RotZ sin RotY cos mul def
+ /M22 RotZ sin RotY sin RotX sin mul mul
+ RotZ cos RotX cos mul add def
+ /M23 RotZ sin RotY sin mul RotX cos mul
+ RotZ cos RotX sin mul sub def
+ /M31 RotY sin neg def
+ /M32 RotX sin RotY cos mul def
+ /M33 RotX cos RotY cos mul def
+ }%
+% hv 2003-12-20
+% -------------- Utilities -----------------
+\SpecialCoor
+\pstheader{pst-vue3d.pro}
+
+\def\face{%
+ \pscurve(1;160)(0.8;180)(1;200)
+ \pscustom{\gsave\psarc(0,0){1}{165}{195}
+ \pscurve(1;195)(0.85;180)(1;165)
+ \fill[fillstyle=solid,fillcolor=blue]\grestore}
+ \pscurve[linewidth=.4pt](1;195)(0.85;180)(1;165)
+ \bgroup
+ \psset{linewidth=2pt}
+ \psarc(0,1){1}{180}{270}
+ \psarc(0,-1){1}{90}{180}
+ \egroup
+ \psarc(0,0){1}{150}{210}
+ \psset{linewidth=4pt,linecolor=gray}%
+ \pscurve(-.5,3.5)(-1,3)(-1.2,2.5)(-1.3,2)(-1.4,1)(-1.35,0.5)%
+ (-1.2,-.2)(-1.35,-.5)(-1.4,-1)(-1.5,-1.5)(-1.8,-2)(-1.8,-2.3)%
+ (-1.65,-2.5)(-1.35,-2.55)(-.95,-2.8)(-.95,-3.35)(-1,-3.65)(-.8,-4)(-.4,-4.1)
+ \pscurve(-.8,-4)(-.8,-4.2)(-.5,-4.5)(-.4,-5)(-.25,-5.5)(0,-5.8)(.5,-6)%
+}
+\def\eye{%
+ \psarc[linewidth=2pt](0,2.5){2.5}{215}{270}%
+ \psarc[linewidth=2pt](0,-2.5){2.5}{90}{140}%
+ \psarc(-2.5,0){1}{-30}{30}%
+ \psarc(0,0){1.75}{160}{200}
+ \psclip{\pscircle[linestyle=none](0,0){1.75}}
+ \pscircle[fillstyle=solid,fillcolor=lightgray](-2.5,0){0.9}
+ \endpsclip%
+}
+%
+% -------------- Basic Macros --------------
+%
+% hv 2003
+\def\AxesThreeD{\pst@object{AxesThreeD}}
+\def\AxesThreeD@i{\@ifnextchar({\AxesThreeD@iii}{\AxesThreeD@ii}}
+\def\AxesThreeD@ii#1(#2){%
+ \begingroup
+ \addto@par{arrows=#1}%
+ \begin@OpenObj
+ \AxesThreeD@iv#2,@comma*\relax%
+}
+\def\AxesThreeD@iii(#1){%
+ \begingroup
+ \begin@OpenObj
+ \AxesThreeD@iv#1,@comma*\relax%
+}
+%
+\def\AxesThreeD@iv#1,#2*{%
+ \def\@tempa{#2}\def\@tempb{@comma}%
+ \ifx\@tempa\@tempb% only one value
+ \AxesThreeD@v#1,#2\else\AxesThreeD@vi#1,#2\relax%
+ \fi%
+}
+\def\AxesThreeD@v#1,#2\relax{%
+ \AxesThreeD@vi#1,#1,#1,#1\relax%
+}
+\def\AxesThreeD@vi#1,#2,#3,#4\relax{%
+ \use@par
+ \pNodeThreeD(0,0,0){Origin}%
+ \pNodeThreeD(0,0,#3){ZMax}\pNodeThreeD(#1,0,0){XMax}\pNodeThreeD(0,#2,0){YMax}%
+ \psline(Origin)(ZMax)\psline(Origin)(XMax)\psline(Origin)(YMax)%
+ \uput[0](ZMax){\small Z}\uput[90](XMax){\small X}\uput[0](YMax){\small Y}%
+ \end@OpenObj
+ \endgroup
+}
+%
+% hv 2003
+\def\showCoorThreeD{\pst@object{showCoorThreeD}}
+\def\showCoorThreeD@i(#1){{%
+ \begin@OpenObj
+ \showCoorThreeD@ii#1,@comma*\relax
+ \end@OpenObj
+ }\ignorespaces%
+}
+\def\showCoorThreeD@ii#1,#2*{%
+ \def\@tempa{#2}\def\@tempb{@comma}%
+ \ifx\@tempa\@tempb%
+ \showCoorThreeD@iii#1;#2\else\showCoorThreeD@iv#1,#2\relax%
+ \fi%
+}
+%
+\def\showCoorThreeD@iii#1;#2;#3;#4\relax{%
+ \psline(!
+ \variablesTroisD
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /Zcote Radius latitude sin mul def
+ /Xabscisse Radius longitude cos mul latitude cos mul def
+ /Yordonnee Radius longitude sin mul latitude cos mul def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)(!
+ /Zcote 0 def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)
+ \psline(!
+ /Zcote 0 def
+ /Xabscisse Radius longitude cos mul latitude cos mul def
+ /Yordonnee Radius longitude sin mul latitude cos mul def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)(!
+ /Zcote 0 def
+ /Yordonnee 0 def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)
+ \psline(!
+ /Zcote 0 def
+ /Xabscisse Radius longitude cos mul latitude cos mul def
+ /Yordonnee Radius longitude sin mul latitude cos mul def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)(!
+ /Zcote 0 def
+ /Xabscisse 0 def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end)
+}
+%
+\def\showCoorThreeD@iv#1,#2,#3,#4\relax{%
+% \qdisk(P){1pt}
+ \LineThreeD(#1,#2,#3)(#1,#2,0)%
+ \LineThreeD(#1,#2,0)(#1,0,0)%
+ \LineThreeD(#1,#2,0)(0,#2,0)%
+}
+%
+%
+\def\CubeThreeD{\def\pst@par{}\pst@object{CubeThreeD}}
+\def\CubeThreeD@i(#1,#2,#3){{
+ \begin@ClosedObj
+% \use@par
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ \ifPst@CubeInside /Condition { ge } def \else /Condition { le } def \fi
+ /CubeColorFaceOne {\psk@TroisD@CubeColorFaceOne} def
+ /CubeColorFaceTwo {\psk@TroisD@CubeColorFaceTwo} def
+ /CubeColorFaceThree {\psk@TroisD@CubeColorFaceThree} def
+ /CubeColorFaceFive {\psk@TroisD@CubeColorFaceFive} def
+ /CubeColorFaceFour {\psk@TroisD@CubeColorFaceFour} def
+ /CubeColorFaceSix {\psk@TroisD@CubeColorFaceSix} def
+ tx@3DDict begin
+ /Condition1 { PS1 0 le } def
+ Cube
+ end
+ }% fin du code ps
+ \end@ClosedObj%
+}}
+%
+\def\DieThreeD{\pst@object{DieThreeD}}
+\def\DieThreeD@i(#1,#2,#3){{%
+% (#2,#3,#4) coordonnées du centre
+ \begin@ClosedObj
+ \use@par
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ \ifPst@CubeInside /Condition { ge } def \else /Condition {le } def \fi
+ /CubeColorFaceOne {\psk@TroisD@CubeColorFaceOne} def
+ /CubeColorFaceTwo {\psk@TroisD@CubeColorFaceTwo} def
+ /CubeColorFaceThree {\psk@TroisD@CubeColorFaceThree} def
+ /CubeColorFaceFive {\psk@TroisD@CubeColorFaceFive} def
+ /CubeColorFaceFour {\psk@TroisD@CubeColorFaceFour} def
+ /CubeColorFaceSix {\psk@TroisD@CubeColorFaceSix} def
+ tx@3DDict begin
+ Cube
+ PointsDie
+ end
+ }% fin du code ps
+ \end@ClosedObj%
+}}
+%
+% Dodecahedron : 31 décembre 2003 ml
+\def\DodecahedronThreeD{\pst@object{DodecahedronThreeD}}
+\def\DodecahedronThreeD@i(#1,#2,#3){{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ /Condition {le } def
+ tx@3DDict begin
+ Dodecahedron
+ end
+ }% fin du code ps
+ \end@ClosedObj%
+}}
+%
+\def\SphereThreeD{\pst@object{SphereThreeD}}
+\def\SphereThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordonnées du centre
+% #5 rayon
+ \begin@ClosedObj%
+ \use@par
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ /increment 10 def
+ tx@3DDict begin
+ /condition { PSfacette 0 le } def
+ /departPhi -90 def
+ MaillageSphere
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj%
+}\ignorespaces}
+% % fin de la commande PSTricks
+%
+% 2décembre 2002
+%
+\def\SphereInverseThreeD{\pst@object{SphereInverseThreeD}}
+\def\SphereInverseThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordonnées du centre
+% #5 rayon
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ /increment 10 def
+ tx@3DDict begin
+ /condition {PSfacette 0 ge} def
+ /departPhi -90 def
+ MaillageSphere
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj%
+}\ignorespaces}
+% % fin de la commande PSTricks
+% fin 2 décembre 2002
+%
+\def\SphereCercleThreeD{\pst@object{SphereCercleThreeD}}
+\def\SphereCercleThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordonnées du centre
+% #5 rayon
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ tx@3DDict begin
+ 0 2 360 {
+ /ThetaEquateur exch def
+ /Xpoint Rsphere ThetaEquateur cos mul PhiCercle cos mul def
+ /Ypoint Rsphere ThetaEquateur sin mul PhiCercle cos mul def
+ /Zpoint Rsphere PhiCercle sin mul def
+ CalculsPointsAfterTransformations
+% rayon de las sphère (normale)
+ /nXfacette Xabscisse CX sub def
+ /nYfacette Yordonnee CY sub def
+ /nZfacette Zcote CZ sub def
+% rayon vers point de vue
+ /RXvue Xabscisse XpointVue sub def
+ /RYvue Yordonnee YpointVue sub def
+ /RZvue Zcote ZpointVue sub def
+% test de visibilité
+ /PSPoint RXvue nXfacette mul
+ RYvue nYfacette mul add
+ RZvue nZfacette mul add
+ def
+ PSPoint 0 le {
+ newpath
+ CalcCoordinates
+ 0.5 0 360 arc
+ closepath
+ fill
+ } if
+%lineto
+ } for
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj%
+}\ignorespaces}
+%
+%
+\def\SphereMeridienThreeD{\pst@object{SphereMeridienThreeD}}
+\def\SphereMeridienThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordonnées du centre
+% #5 rayon
+ \begin@ClosedObj%
+ \use@par
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ tx@3DDict begin
+ 0 2 360 {
+ /PhiCercle exch def
+ /Xpoint Rsphere ThetaMeridien cos mul PhiCercle cos mul def
+ /Ypoint Rsphere ThetaMeridien sin mul PhiCercle cos mul def
+ /Zpoint Rsphere PhiCercle sin mul def
+ CalculsPointsAfterTransformations
+% rayon de las sphère (normale)
+ /nXfacette Xabscisse CX sub def
+ /nYfacette Yordonnee CY sub def
+ /nZfacette Zcote CZ sub def
+% rayon vers point de vue
+ /RXvue Xabscisse XpointVue sub def
+ /RYvue Yordonnee YpointVue sub def
+ /RZvue Zcote ZpointVue sub def
+% test de visibilité
+ /PSPoint RXvue nXfacette mul
+ RYvue nYfacette mul add
+ RZvue nZfacette mul add
+ def
+ PSPoint 0 le{
+ newpath
+ CalcCoordinates
+ 0.5 0 360 arc
+ closepath
+ fill
+ } if
+ %lineto
+ } for
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj%
+}\ignorespaces}
+%
+\def\CylindreThreeD{\pst@object{CylindreThreeD}}
+\def\CylindreThreeD@i(#1,#2,#3)#4#5{{%
+% Le centre de la base sera placé avec
+% (#2,#3,#4) les paramètres CX,CY et CZ
+% #5 rayon
+% #6 hauteur
+% on peut ensuite faire tourner le cylindre
+% avec RotX, RotY et RotZ
+ \begin@ClosedObj
+ \use@par
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rcylindre #4 def
+ /Hcylindre #5 def
+ /incrementANGLE 10 def
+ /incrementHAUTEUR Hcylindre 5 div def
+ tx@3DDict begin
+ CylinderThreeD
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj
+}\ignorespaces}% % fin de la commande PSTricks
+%
+% hv 2003-12-18
+\def\LineThreeD{\pst@object{LineThreeD}}
+\def\LineThreeD@i(#1,#2,#3)(#4,#5,#6){{%
+% (#2,#3,#4) coordonnées du point1
+% (#5,#6,#7) coordonnées du point2
+ \begin@OpenObj
+ \pNodeThreeD(#1,#2,#3){tempNodeA}
+ \pNodeThreeD(#4,#5,#6){tempNodeB}
+ \psline(tempNodeA)(tempNodeB)
+ \end@OpenObj
+}\ignorespaces}
+%
+% hv 2003-12-17
+\def\pNodeThreeD{\pst@object{pNodeThreeD}}
+% point can be in cartesian (x,y,z) or sphere coordinates (r;phi;theta)
+\def\pNodeThreeD@i(#1)#2{{%
+ \begin@ClosedObj
+ \edef\@NodeNameThreeD{#2}
+ \pNodeThreeD@ii#1,@comma*\relax
+ \end@ClosedObj
+ }\ignorespaces%
+}
+\def\pNodeThreeD@ii#1,#2*{%
+ \def\@tempa{#2}\def\@tempb{@comma}%
+ \ifx\@tempa\@tempb%
+ \pNodeThreeD@iii#1;#2\else\pNodeThreeD@iv#1,#2\relax%
+ \fi%
+}
+\def\pNodeThreeD@iii#1;#2;#3;#4\relax{%
+ \pnode(!
+ \variablesTroisD
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /Zcote Radius latitude sin mul def
+ /Xabscisse Radius longitude cos mul latitude cos mul def
+ /Yordonnee Radius longitude sin mul latitude cos mul def
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end){\@NodeNameThreeD}
+}
+\def\pNodeThreeD@iv#1,#2,#3,#4\relax{%
+ \pnode(!
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /Zcote Radius latitude sin mul def
+ /Xabscisse Radius longitude cos mul latitude cos mul def
+ /Yordonnee Radius longitude sin mul latitude cos mul def
+ \else
+ /Zcote #3 def
+ /Xabscisse #1 def
+ /Yordonnee #2 def
+ \fi
+ tx@3DDict begin
+ formulesTroisD
+ Xi reduction mul Yi reduction mul
+ end){\@NodeNameThreeD}%
+}
+%
+
+\iffalse
+% hv 2005-12-04
+\def\pnodeThreeD{\pst@object{pnodeThreeD}}
+\def\pnodeThreeD@i(#1,#2,#3)#4{%
+ \pst@killglue
+ \begingroup
+ \use@par
+ \pnode(!
+ \psk@embedangle
+ \psk@viewpoint
+ \psk@viewangle
+ \tx@SetMatrixThreeD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ Radius longitude cos mul latitude cos mul % x
+ Radius longitude sin mul latitude cos mul % y
+ Radius latitude sin mul % z
+ \else
+ #1 #2 #3
+ \fi
+ \tx@ProjThreeD){#4}%
+ \endgroup}
+%
+\let\pNodeThreeD\pnodeThreeD
+\fi
+%
+\def\TetraedreThreeD{\pst@object{TetraedreThreeD}}
+\def\TetraedreThreeD@i(#1,#2,#3){{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ tx@3DDict begin
+ Tetraedre
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+%
+% pyramide
+%
+\def\FaceSAB{\pst@object{FaceSAB}}
+\def\FaceSAB@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSAB 0 le { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XS 1 fracHeight sub XA XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YA YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ moveto
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ lineto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XB XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YB YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+\def\FaceSBC{\pst@object{FaceSBC}}
+\def\FaceSBC@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSBC 0 le { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XS 1 fracHeight sub XB XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YB YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ moveto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XC XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YC YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+%
+\def\FaceSCD{\pst@object{FaceSCD}}
+\def\FaceSCD@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSCD 0 le { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XS 1 fracHeight sub XC XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YC YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ moveto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XD XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YD YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+\def\FaceSDA{\pst@object{FaceSDA}}
+\def\FaceSDA@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSDA 0 le { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XS 1 fracHeight sub XD XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YD YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ moveto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XA XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YA YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+\def\FaceABCD{\pst@object{FaceABCD}}
+\def\FaceABCD@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSABCD 0 le { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XA def
+ /Yordonnee YA def
+ /Zcote ZA def
+ CalcCoordinates
+ moveto
+ /Xabscisse XB def
+ /Yordonnee YB def
+ /Zcote ZB def
+ CalcCoordinates
+ lineto
+ /Xabscisse XC def
+ /Yordonnee YC def
+ /Zcote ZC def
+ CalcCoordinates
+ lineto
+ /Xabscisse XD def
+ /Yordonnee YD def
+ /Zcote ZD def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+% hv 2003
+\def\FaceABCDTop{\pst@object{FaceABCDTop}}
+\def\FaceABCDTop@i(#1,#2,#3)#4{{%
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Hpyramide #4 def
+ tx@3DDict begin
+ SommetsPyramide
+ PSABCD 0 gt { %
+ reduction reduction scale
+ newpath
+ 1 setlinejoin
+ /Xabscisse XS 1 fracHeight sub XD XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YD YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ moveto
+ /Xabscisse XS 1 fracHeight sub XA XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YA YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XB XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YB YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ /Xabscisse XS 1 fracHeight sub XC XS sub mul add def
+ /Yordonnee YS 1 fracHeight sub YC YS sub mul add def
+ /Zcote ZS CZ sub fracHeight mul CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ } if
+ end
+ }% fin du code ps
+ \end@ClosedObj
+}\ignorespaces}
+%
+\def\PyramideThreeD{\@ifnextchar[{\PyramideThreeD@i}{\PyramideThreeD@i[]}}
+% (#2,#3,#4) the coordinates of the origin
+% #5 the height of the pyrimide
+\def\PyramideThreeD@i[#1](#2,#3,#4)#5{{%
+ \FaceSAB[fillcolor=\psk@TroisD@TetraedreColorFaceA,#1](#2,#3,#4){#5}%
+ \FaceSBC[fillcolor=\psk@TroisD@TetraedreColorFaceB,#1](#2,#3,#4){#5}%
+ \FaceSCD[fillcolor=\psk@TroisD@TetraedreColorFaceC,#1](#2,#3,#4){#5}%
+ \FaceSDA[fillcolor=\psk@TroisD@TetraedreColorFaceD,#1](#2,#3,#4){#5}%
+ \FaceABCD[fillcolor=\psk@TroisD@TetraedreColorFaceE,#1](#2,#3,#4){#5}%
+ \FaceABCDTop[fillcolor=\psk@TroisD@TetraedreColorFaceE,#1](#2,#3,#4){#5}%
+}\ignorespaces}
+%
+%
+\def\ConeThreeD{\pst@object{ConeThreeD}}
+\def\ConeThreeD@i(#1,#2,#3)#4#5{%
+% Le centre de la base sera placé avec
+% (#2,#3,#4) les paramètres CX,CY et CZ
+% #5 rayon
+% #6 hauteur
+% on peut ensuite faire tourner le cylindre
+% avec RotX, RotY et RotZ
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rcone #4 def
+ /Hcone #5 def
+ tx@3DDict begin
+ ConeThreeD
+ end
+ }% fin du code ps
+ \showpointsfalse
+ \end@ClosedObj
+\ignorespaces}%
+%
+\def\CircleThreeD{\pst@object{CircleThreeD}}
+\def\CircleThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) les paramètres CX,CY et CZ
+% #5 rayon du cercle
+ \begin@ClosedObj
+ \addto@pscode{%
+ /Rcercle #4 def
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ tx@3DDict begin
+ reduction reduction scale
+ /TableauxPoints [
+ 0 1 360 {% on décrit le cercle
+ /Angle exch def [
+ /Xcercle Rcercle Angle cos mul def
+ /Ycercle Rcercle Angle sin mul def
+ /Xabscisse Xcercle S1 mul Ycercle S2 C1 mul mul add CX add def
+ /Yordonnee Xcercle C1 mul neg Ycercle S2 S1 mul mul add CY add def
+ /Zcote Ycercle C2 mul neg CZ add def
+ CalcCoordinates ]
+ } for
+ ] def
+ TableauxPoints 0 get aload pop moveto
+ 0 1 360 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+ end
+ }% fin du code ps
+ \showpointsfalse
+ \end@ClosedObj
+}\ignorespaces}
+%
+%
+\def\FrameThreeD{\pst@object{FrameThreeD}}
+\def\FrameThreeD@i(#1,#2,#3)(#4,#5)(#6,#7){{%
+% (#2,#3,#4) the origin
+% (#5,#6) d'un sommet
+% (#7,#8) du sommet opposé
+% rectangle ABCD
+ \begin@ClosedObj
+ \addto@pscode{%
+ /XA #4 def
+ /YA #5 def
+ /XC #6 def
+ /YC #7 def
+% on en déduit les autres sommets
+ /XB XC def
+ /YB YA def
+ /XD XA def
+ /YD YC def
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ tx@3DDict begin
+ reduction reduction scale
+ newpath
+ /Xframe XA def
+ /Yframe YA def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add CX add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add CY add def
+ /Zcote Yframe C2 mul neg CZ add def
+ CalcCoordinates
+ moveto
+ /Xframe XB def
+ /Yframe YB def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add CX add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add CY add def
+ /Zcote Yframe C2 mul neg CZ add def
+ CalcCoordinates
+ lineto
+ /Xframe XC def
+ /Yframe YC def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add CX add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add CY add def
+ /Zcote Yframe C2 mul neg CZ add def
+ CalcCoordinates
+ lineto
+ /Xframe XD def
+ /Yframe YD def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add CX add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add CY add def
+ /Zcote Yframe C2 mul neg CZ add def
+ CalcCoordinates
+ lineto
+ /Xframe XA def
+ /Yframe YA def
+ /Xabscisse Xframe S1 mul Yframe S2 C1 mul mul add CX add def
+ /Yordonnee Xframe C1 mul neg Yframe S2 S1 mul mul add CY add def
+ /Zcote Yframe C2 mul neg CZ add def
+ CalcCoordinates
+ lineto
+ closepath
+ end
+ }% fin du code ps
+ \showpointsfalse
+ \end@ClosedObj
+}\ignorespaces}% % fin de la commande PSTricks
+%
+%
+\def\QuadrillageThreeD{\pst@object{QuadrillageThreeD}}
+\def\QuadrillageThreeD@i(#1,#2,#3)(#4,#5)(#6,#7){{%
+ \begin@OpenObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ /Xmin #4 def
+ /Xmax #6 def
+ /Ymin #5 def
+ /Ymax #7 def
+ /pas \psk@TroisD@pas\space def
+ /grille \psk@TroisD@grille\space def
+ tx@3DDict begin
+ reduction reduction scale
+ Ymin grille Ymax {% balayage suivant Oy
+ /Ygrille exch def
+ /TableauxPoints [
+ Xmin pas Xmax { % balayage suivant Ox
+ /Xgrille exch def
+ /Xabscisse Xgrille S1 mul Ygrille S2 C1 mul mul add CX add def
+ /Yordonnee Xgrille C1 mul neg Ygrille S2 S1 mul mul add CY add def
+ /Zcote Ygrille C2 mul neg CZ add def
+ formulesTroisD
+ [ Xi 28.45 mul Yi 28.45 mul ]
+ } for
+ ] def
+ TableauxPoints 0 get aload pop moveto
+ 0 1 Xmax Xmin sub pas div {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto
+ } for
+% stroke
+ } for
+%
+ Xmin grille Xmax {% balayage suivant Ox
+ /Xgrille exch def
+ /TableauxPoints [
+ Ymin pas Ymax { % balayage suivant Ox
+ /Ygrille exch def
+ /Xabscisse Xgrille S1 mul Ygrille S2 C1 mul mul add CX add def
+ /Yordonnee Xgrille C1 mul neg Ygrille S2 S1 mul mul add CY add def
+ /Zcote Ygrille C2 mul neg CZ add def
+ formulesTroisD
+ [ Xi 28.45 mul Yi 28.45 mul ]
+ } for
+ ] def
+ TableauxPoints 0 get aload pop moveto
+ 0 1 Ymax Ymin sub pas div {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto
+ } for
+ \pst@number\pslinewidth SLW
+ \pst@usecolor\pslinecolor
+ \@nameuse{psls@\pslinestyle}
+% stroke
+ } for
+% fin du tracé
+ end
+ }% fin du code ps
+ \end@OpenObj
+}\ignorespaces}% % fin de la commande PSTricks
+%
+\newif\ifPstThreeDplot@showInside
+\define@key[psset]{pst-vue3d}{showInside}[true]{\@nameuse{PstThreeDplot@showInside@#1}}
+\define@key[psset]{pst-vue3d}{SegmentColor}{\pst@getcolor{#1}\psk@ThreeDplot@SegmentColor}
+\define@key[psset]{pst-vue3d}{increment}{\pst@getint{#1}\psk@ThreeDplot@increment}
+\psset[pst-vue3d]{showInside,SegmentColor={[cmyk]{0.2,0.6,1,0}},increment=10}
+%
+\def\ParaboloidThreeD{\pst@object{ParaboloidThreeD}}
+\def\ParaboloidThreeD@i#1#2{%
+\begin@SpecialObj%
+\addto@pscode{%
+ \psk@embedangle
+ \psk@viewpoint
+ \psk@viewangle
+ \tx@SetMatrixThreeD
+% Vecteur ViewPoint
+ \psk@viewpoint
+ /vZ ED
+ /vY ED
+ /vX ED
+ /increment \psk@ThreeDplot@increment\space def
+ /height #1 def
+ /radius #2 #1 sqrt div def
+ /cmyk {} def
+ 1 setlinejoin
+ % les rayons de lumière
+ /xLight 1 def
+ /yLight 0.1 def
+ /zLight 0.2 def
+ % précision du tracé
+ /pas 0.5 def
+ /pas10 {pas 10 div} bind def
+%
+ /NormeLight {xLight dup mul yLight dup mul zLight dup mul add add sqrt} bind def
+% l'ellipse du plan de coupe : le contour
+ /calculate2DPoint { % four values on stack; x2D y2D are returned
+ /V0 ED /Z0 ED /U20 ED /U10 ED
+ U10 cos V0 mul radius mul \pst@number\psunit mul
+ U20 sin V0 mul radius mul \pst@number\psunit mul
+ Z0 \pst@number\psunit mul \tx@ProjThreeD
+ } def
+ /PlanCoupe {
+ /Z height store
+ /V {Z sqrt} bind def
+ /TableauxPoints [
+ 0 1 359 {
+ /U exch def [ U U Z V caclculate2DPoint ] % on décrit le cercle
+ } for
+ ] def
+ newpath
+ TableauxPoints 0 get aload pop moveto
+ 0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+ closepath
+ } def
+%
+ /facette {
+ newpath
+ U U Z V calculate2DPoint moveto
+ U 1 U increment add {%
+ /U1 exch def
+ U1 U1 Z V calculate2DPoint lineto
+ } for
+ Z pas10 Z pas add pas10 add{
+ /Z1 exch def
+ /V {Z1 sqrt} bind def
+ U1 U1 Z1 V calculate2DPoint lineto
+ } for
+ U increment add -1 U {%
+ /U2 exch def
+ U2 U2 Z pas add V calculate2DPoint lineto
+ } for
+ Z pas add pas10 sub pas10 neg Z pas10 sub{
+ /Z2 exch def
+ /V {Z2 abs sqrt} bind def
+ U U Z2 V calculate2DPoint lineto
+ } for
+ closepath
+ } def % facette
+%
+ /MaillageParaboloid {
+ 0 pas height pas sub{%
+ /Z ED
+ /V {Z sqrt} bind def
+ 0 increment 360 increment sub {%
+ /U exch def
+% Centre de la facette
+ /Ucentre {U increment 2 div add} bind def
+ /Vcentre {Z pas 2 div add sqrt} bind def
+% normale à la facette
+ /nXfacette {2 Vcentre dup mul mul Ucentre cos mul radius mul} bind def
+ /nYfacette {2 Vcentre dup mul mul Ucentre sin mul radius mul} bind def
+ /nZfacette {Vcentre neg radius dup mul mul} bind def
+ /NormeN {
+ nXfacette dup mul
+ nYfacette dup mul
+ nZfacette dup mul
+ add add sqrt} bind def
+ NormeN 0 eq {/NormeN 1e-10 def} if
+% test de visibilité
+ /PSfacette vX nXfacette mul
+ vY nYfacette mul add
+ vZ nZfacette mul add def
+ condition {
+ facette
+ /cosV {1 xLight nXfacette mul
+ yLight nYfacette mul
+ zLight nZfacette mul
+ add add
+ NormeLight
+ NormeN mul div sub} bind def
+ \psk@ThreeDplot@SegmentColor\space
+ cosV mul 4 1 roll cosV mul 4 1 roll cosV dup mul mul 4 1 roll cosV dup mul mul 4 1 roll
+ setcmykcolor fill
+ 0 setgray
+ facette
+ stroke
+ } if
+ } for
+ } for
+ } def
+ /conditionGE {PSfacette 0 ge} def
+ /conditionLE {PSfacette 0 le} def
+ \ifPstThreeDplot@showInside
+ /condition {conditionGE} def
+ MaillageParaboloid
+ vZ 0 ge {%
+ PlanCoupe 1 0.5 0.5 setrgbcolor fill
+ PlanCoupe 0 setgray stroke} if
+ \else
+ /condition {conditionLE} def
+ MaillageParaboloid
+ /condition {conditionGE} def
+ MaillageParaboloid%
+ \fi
+}
+% fin du code ps
+\showpointsfalse
+\end@SpecialObj}
+%
+%
+% 11 novembre
+\def\DemiSphereThreeD{\pst@object{DemiSphereThreeD}}
+\def\DemiSphereThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordinates of the center
+% #5 rayon
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ /increment 10 def
+ tx@3DDict begin
+ /condition { PSfacette 0 le } def
+ /departPhi 0 def
+ MaillageSphere
+% centre de la base inférieure après transformations
+ /CxFaceInf CX def
+ /CyFaceInf CY def
+ /CzFaceInf CZ def
+% correction 16 novembre 2002
+% /Xpoint CxFaceInf def
+% /Ypoint CyFaceInf def
+% /Zpoint CzFaceInf def
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint 0 def
+% fin correction 16/11/2002
+ CalculsPointsAfterTransformations
+ /CxBaseInf Xabscisse def
+ /CyBaseInf Yordonnee def
+ /CzBaseInf Zcote def
+ /RXvueInf CxBaseInf XpointVue sub def
+ /RYvueInf CyBaseInf YpointVue sub def
+ /RZvueInf CzBaseInf ZpointVue sub def
+% Sommet de la sphère
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint Rsphere def
+ CalculsPointsAfterTransformations
+ /XsommetSphere Xabscisse def
+ /YsommetSphere Yordonnee def
+ /ZsommetSphere Zcote def
+% Normale extérieure à la base inférieure
+ /nXBaseInf CxFaceInf XsommetSphere sub def
+ /nYBaseInf CyFaceInf YsommetSphere sub def
+ /nZBaseInf CzFaceInf ZsommetSphere sub def
+% Visibilité de la base inférieure
+ /PSbaseSphere nXBaseInf RXvueInf mul
+ nYBaseInf RYvueInf mul add
+ nZBaseInf RZvueInf mul add def
+ PSbaseSphere 0 le {
+ /TableauxPoints [
+ 0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rsphere theta cos mul def
+ /Ypoint Rsphere theta sin mul def
+ /Zpoint 0 def
+ CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+ gsave
+ newpath
+ TableauxPoints 0 get aload pop moveto
+ 0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto
+ } for
+ 0.7 setgray
+ closepath
+ fill
+ grestore
+ } if
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj
+}\ignorespaces}% % fin de la commande PSTricks
+%
+%
+\def\SphereCreuseThreeD{\pst@object{SphereCreuseThreeD}}
+\def\SphereCreuseThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordinates of the center
+% #5 rayon
+ \begin@ClosedObj
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ /increment 10 def
+ tx@3DDict begin
+ /SphereInside {
+ /condition {PSfacette 0 ge} def
+ /departPhi 0 def
+ MaillageSphere
+ } def
+%% centre de la base inférieure après transformations
+ /CxFaceInf CX def
+ /CyFaceInf CY def
+ /CzFaceInf CZ def
+ /Xpoint CxFaceInf def
+ /Ypoint CyFaceInf def
+ /Zpoint CzFaceInf def
+ CalculsPointsAfterTransformations
+ /CxBaseInf Xabscisse def
+ /CyBaseInf Yordonnee def
+ /CzBaseInf Zcote def
+ /RXvueInf CxBaseInf XpointVue sub def
+ /RYvueInf CyBaseInf YpointVue sub def
+ /RZvueInf CzBaseInf ZpointVue sub def
+% Sommet de la sphère
+ /Xpoint 0 def
+ /Ypoint 0 def
+ /Zpoint Rsphere def
+ CalculsPointsAfterTransformations
+ /XsommetSphere Xabscisse def
+ /YsommetSphere Yordonnee def
+ /ZsommetSphere Zcote def
+% Normale extérieure à la base inférieure
+ /nXBaseInf CxFaceInf XsommetSphere sub def
+ /nYBaseInf CyFaceInf YsommetSphere sub def
+ /nZBaseInf CzFaceInf ZsommetSphere sub def
+% Visibilité de la base inférieure
+ /PSbaseSphere nXBaseInf RXvueInf mul nYBaseInf RYvueInf mul add
+ nZBaseInf RZvueInf mul add def
+ /base {
+ /TableauxPoints [
+ 0 1 359 {% on décrit le cercle
+ /theta exch def [
+ /Xpoint Rsphere theta cos mul def
+ /Ypoint Rsphere theta sin mul def
+ /Zpoint 0 def
+ CalculsPointsAfterTransformations
+ CalcCoordinates ]
+ } for
+ ] def
+% gsave
+ newpath
+ TableauxPoints 0 get aload pop moveto
+ 0 1 359 {
+ /compteur exch def
+ TableauxPoints compteur get aload pop
+ lineto } for
+ 0.7 setgray
+ closepath
+% stroke
+%grestore
+ } def
+ PSbaseSphere 0 le {
+ base
+ clip
+ SphereInside
+ }{ 0 0 0.01 0 360 arc } ifelse
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj
+}\ignorespaces}% % fin de la commande PSTricks
+%
+% 30 novembre 2002
+% révisé le 30 octobre 2003
+\def\PortionSphereThreeD{\pst@object{PortionSphereThreeD}}
+\def\PortionSphereThreeD@i(#1,#2,#3)#4{{%
+% (#2,#3,#4) coordinates of the center
+% #5 rayon
+ \begin@ClosedObj%
+ \addto@pscode{%
+ \variablesTroisD
+ \ifPst@SphericalCoor
+ /Radius #1 def
+ /longitude #2 def
+ /latitude #3 def
+ /CZ Radius latitude sin mul def
+ /CX Radius longitude cos mul latitude cos mul def
+ /CY Radius longitude sin mul latitude cos mul def
+ \else
+ /CX #1 def
+ /CY #2 def
+ /CZ #3 def
+ \fi
+ reduction reduction scale
+ /Rsphere #4 def
+ /increment 1 def
+% /increment 2.5 def
+ tx@3DDict begin
+ PortionSphere
+ end
+ }% fin du code ps
+ \showpointsfalse%
+ \end@ClosedObj%
+}\ignorespaces}% % fin de la commande PSTricks
+%
+\catcode`\@=\PstAtCode\relax
+%
+%% END: pst-vue3D.tex
+\endinput
+