Retour

hyperboloid_object.tex

Télécharger le fichier
\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