\makeatletter \pstheader{hyperboloid.pro} \define@key[psset]{pst-V3D}{nF}{\def\pst@VIIID@nF{#1}} % nombre de facettes > 20 \define@key[psset]{pst-V3D}{nH}{\def\pst@VIIID@nH{#1}} % nombre de mailles en hauteur \define@key[psset]{pst-V3D}{H}{\def\pst@VIIID@H{#1}} % hauteur totale \define@key[psset]{pst-V3D}{R}{\def\pst@VIIID@R{#1}} % rayon de la base \define@key[psset]{pst-V3D}{r}{\def\pst@VIIID@r{#1}} % rayon de la cheminée \psset[pst-V3D]{nF=20,nH=10,H=8,R=10,r=3} \def\psHyperboloid{\pst@object{psHyperboloid}} \def\psHyperboloid@i(#1,#2,#3){{%{{% \begin@ClosedObj \use@par \addto@pscode{% 1 setlinejoin \tx@parametresIIID HyperboloidDict begin /CX #1 def /CY #2 def /CZ #3 def /dT {360 \pst@VIIID@nF\space div} bind def /incrementHAUTEUR \pst@VIIID@H\space \pst@VIIID@nH\space div def /H \pst@VIIID@H\space def /R \pst@VIIID@R\space def /r \pst@VIIID@r\space def /a r store /c {a H mul R dup mul r dup mul sub sqrt div }bind def % /StartH H a div neg def /PointsApresTransformations{% 3 dict begin M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add CX add M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add CY add M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add CZ add end } def /condition {PSfacette 0 ge} def /ChangeSigne {1 mul} def MaillageHyperboloid % Bases \ifPst@interior H_S exch /h ED /s ED /ChangeSigne { -1 mul } def /H_S { h dup mul s 2 div } def /condition {PSfacette 0 le} def PSbaseSup 0 ge { gsave FaceSup clip MaillageHyperboloid grestore %FaceSup %0 setgray stroke } if PSbaseInf 0 ge { gsave FaceInf clip MaillageHyperboloid grestore %FaceInf %0 setgray stroke } if \else PSbaseSup 0 ge { gsave FaceSup H_S 1 sethsbcolor fill FaceSup 0 setgray stroke grestore } if PSbaseInf 0 ge { FaceInf H_S 1 sethsbcolor fill FaceInf 0 setgray stroke } if \fi end }% fin du code ps \end@ClosedObj% }} \makeatother