%% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% %% Author: Manuel Luque %% Herbert Voß %% \csname PSTHyperboloidLoaded\endcsname \let\PSTHyperboloidLoaded\endinput % Requires some packages \ifx\PSTricksLoaded\endinput\else \input pstricks \fi \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi \def\fileversion{0.01} \def\filedate{2026/06/04} \message{`PSTHyperboloidLoaded' v\fileversion, \filedate} \pstheader{pst-hyperboloid.pro} \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax \pst@addfams{pst-hyperboloid} \pst@def{optionsHyperboloid}<% \pst@hyperboloid@base\space /vmax exch def /vmin exch def /umax exch def /umin exch def /R \pst@hyperboloid@R def /H \pst@hyperboloid@h def /a@ \pst@hyperboloid@a def /DemiAxeFocal a@ def \pst@hyperboloid@ngrid /nv exch def /nu exch def /torsion \pst@HyperboloidB@AngleTorsion def /du umax umin sub nu div def /dv vmax vmin sub nv div def % /DemiAxeFocal R torsion 2 div cos mul def % rayon de l'étranglement au milieu /DemiAxeNonFocal H 2 div R dup mul DemiAxeFocal dup mul sub sqrt div DemiAxeFocal mul def /Z0 {DemiAxeNonFocal X0 DemiAxeFocal div dup mul 1 sub sqrt mul} def /Y0 {DemiAxeFocal 1 X0 DemiAxeFocal div dup mul sub sqrt mul} def /Ymax {DemiAxeFocal H 2 DemiAxeNonFocal mul div dup mul 1 add X0 DemiAxeFocal div dup mul sub sqrt mul} def /ConeAsymptote DemiAxeFocal DemiAxeNonFocal div def /xMax DemiAxeNonFocal DemiAxeFocal mul DemiAxeNonFocal dup mul DemiAxeFocal dup mul sub sqrt div def /GrandAxe xMax 2 sqrt mul def /r@ {v dup mul R dup mul a@ dup mul sub mul a@ dup mul add sqrt} def /CalcX {r@ u cos mul} def /CalcY {r@ u sin mul} def /CalcZ {v H mul 2 div} def >% % \define@key[psset]{pst-hyperboloid}{AngleTorsion}{\def\pst@HyperboloidB@AngleTorsion{#1 }} % angle de torsion \define@key[psset]{pst-hyperboloid}{base}{\def\pst@hyperboloid@base{#1 }} % \define@key[psset]{pst-hyperboloid}{ngrid}{\def\pst@hyperboloid@ngrid{#1 }} % \define@key[psset]{pst-hyperboloid}{h}{\def\pst@hyperboloid@h{#1 }} % \define@key[psset]{pst-hyperboloid}{R}{\def\pst@hyperboloid@R{#1 }} % \define@key[psset]{pst-hyperboloid}{a}{\def\pst@hyperboloid@a{#1 }} % \psset[pst-hyperboloid]{AngleTorsion=150,R=4,h=8,ngrid=36 20,base=0 360 -1 1,a=1} % % \def\psHyperboloid{\pst@object{psHyperboloid}} % usage : \pstHyperboloid[options](x,y,z) % \def\psHyperboloid@i{\@ifnextchar({\psHyperboloid@ii}{\psHyperboloid@ii(0,0,0)}} \def\psHyperboloid@ii(#1,#2,#3){% \pst@killglue% \begingroup% \use@par% \pstVerb{ 1 setlinejoin \tx@optionsHyperboloid /sommets0 [ vmin dv vmax dv add {% méridien après méridien : 0 -> 360 /v exch def % les sommets le long d'un méridien /u umin def nu 1 add { [CalcX CalcY CalcZ] /u u du add def }repeat }for ] def % /faces0 { % avant l'ajout du centre 0 1 nv 1 sub { /k1 exch def k1 nu 1 add mul 1 nu k1 1 add mul k1 add 1 sub {/i exch def [ i 1 add i i nu add 1 add i nu add 2 add ] } for } for} def % /Sommets % après l'ajout du centre [ 0 1 nv 1 sub { /k1 exch def k1 nu 1 add mul 1 nu k1 1 add mul k1 add 1 sub {/i exch def [/pointsSommets [ sommets0 i 1 add get aload pop sommets0 i get aload pop sommets0 i nu add 1 add get aload pop sommets0 i nu add 2 add get aload pop ] def pointsSommets aload pop pointsSommets isobarycentre3d] } for } for] def % /SOMMETS { 0 1 Sommets length 1 sub {/iL exch def Sommets iL get aload pop } for } def % /FACES { 0 5 [SOMMETS] length 3 idiv 5 sub {/iF exch def [iF iF 1 add iF 4 add] [iF 1 add iF 2 add iF 4 add] [iF 2 add iF 3 add iF 4 add] [iF iF 4 add iF 3 add] } for } def }% fin du code ps \psSolid[object=new,sommets=SOMMETS,faces=FACES](#1,#2,#3)% \endgroup% \ignorespaces% }% \definecolor{JaunePale}{rgb}{0.89 0.79 0.435} \endinput