%% code experimental. tout cela doit etre travaille usecolor -6 6 setxrange -5 8 setyrange 30 setxunit -7 7 8 SetCamPos 0 0 0 SetCamView 2 setlinejoin qplanxy solidgridOff {orange} setlight 5 12 6 setlightsrc 2 setlightintensity %% syntaxe : z0 z1 r1 newhyperboloid -> solid /newhyperboloid { 11 dict begin dup xcheck { /mode exch def } { dup isstring { cvx exec /N exch def /n exch def /mode -1 def } { /mode defaultsolidmode def } ifelse } ifelse mode 0 ge { mode 4 eq { /N 18 def %% diviseur de 360 /n 5 def %% nb d'etages } { mode 3 eq { /N 12 def %% diviseur de 360 /n 3 def %% nb d'etages } { /N 10 def %% diviseur de 360 /n 1 def %% nb d'etages } ifelse } ifelse } if /r0 exch def /z1 exch def /z0 exch def /dz z1 z0 sub n div def /FE [ % [0 1 N 1 sub {} for] % [n 1 add N mul 1 sub -1 n N mul {} for] 0 1 n 1 sub { /k exch def k N mul 1 add 1 k 1 add N mul 1 sub { /i exch def [i i 1 sub N i add 1 sub N i add] } for [k N mul k 1 add N mul 1 sub k 2 add N mul 1 sub k 1 add N mul] } for ] def /FI FE {reverse} apply def %% tableau des sommets /S [ n -1 0 { /k exch def 0 1 N 1 sub { /i exch def /r z0 dz k mul add dup mul 4 div 1 add sqrt def 360 N idiv i mul cos r mul 360 N idiv i mul sin r mul z0 dz k mul add } for } for ] def [S FE FI append [] []] end } def /fillstyle {jaune fill} def -3 2 2 (10 18) newhyperboloid {0 0 3 translatepoint3d} solidtransform drawsolid**