diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-12 23:46:03 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-12 23:46:03 +0000 |
commit | 873660d1a83ece926fe7206288dda9c36b349c1b (patch) | |
tree | a48f77125c309a355b5d0eb58d6b24446abe9d62 /Master/texmf-dist/tex/generic/pst-vue3d | |
parent | 2939242967231097459df0fc3150fabc2f639111 (diff) |
generic 1
git-svn-id: svn://tug.org/texlive/trunk@613 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-vue3d')
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-vue3d/pst-vue3d.tex | 1468 |
1 files changed, 1468 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-vue3d/pst-vue3d.tex b/Master/texmf-dist/tex/generic/pst-vue3d/pst-vue3d.tex new file mode 100644 index 00000000000..07ae96eb41e --- /dev/null +++ b/Master/texmf-dist/tex/generic/pst-vue3d/pst-vue3d.tex @@ -0,0 +1,1468 @@ + +%% 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) +%% +%% 2004/06/17 +%% +%% 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\PSTXKeyLoaded\endinput\else\input pst-xkey \fi +% +\def\fileversion{1.21}% +\def\filedate{2005/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{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{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 +\newif\ifPst@cubeInside +\define@key[psset]{pst-vue3d}{CubeInside}[false]{\@nameuse{Pst@cubeInside#1}} +\psset{CubeInside=false} +% hv 2003-12-20 +\newif\ifPst@SphericalCoor +\define@key[psset]{pst-vue3d}{SphericalCoor}[true]{\@nameuse{Pst@SphericalCoor#1}} +\psset{SphericalCoor=false} +% +\def\variablesTroisD{% + 0 0 translate + /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{3D.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{\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}% +} +% +% +\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 359 {% 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 359 { + /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 +% +% +% 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 +% +%% END: pst-vue3D.tex +\endinput + |