Source PostScript (newgrillecirculaire.pps)

Retour Texte non formaté
%% syntaxe : r option newgrillecirculaire -> solid /newgrillecirculaire { 6 dict begin [[/K /N] [6 6] [6 8] [10 8] [16 12] [16 36]] gestionsolidmode %% N = nb de meridiens (diviseur de 360 = 2^4 * 3^2 * 5) %% K = nb d horizontales (diviseur de 160 = 2^5 * 5) /r exch def /F [ %% 1er etage 1 1 N { /i exch def [0 i i N mod 1 add] } for %% etages suivants 0 1 K 2 sub { /j exch def 1 1 N { /i exch def [i j N mul add i N add j N mul add i N mod N add 1 add j N mul add i N mod 1 add j N mul add] } for } for ] def %% tableau des sommets /S [ 0 0 0 1 1 K { /j exch def 1 1 N { /i exch def /theta i 360 mul N div def theta cos r j mul K div mul theta sin r j mul K div mul 0 %2 copy f %exch atan 90 div } for } for ] def S F generesolid end } def %% syntaxe : r [dx dy] {f} newsurface* -> solid /newsurface* { 7 dict begin /f_surface exch def [[/nx /ny] [6 6] [6 8] [10 8] [16 12] [16 36]] gestionsolidmode nx isinteger not { %% alors nx est un dx /nx xmax xmin sub nx div cvi store } if ny isinteger not { %% alors ny est un dy /ny ymax ymin sub ny div cvi store } if /dy ymax ymin sub ny div def %% le pas sur y /dx xmax xmin sub nx div def %% le pas sur x %% ny = nb de meridiens %% nx = nb d horizontales /r exch def /F [ %% 1er etage 1 1 ny { /i exch def [0 i i ny mod 1 add] } for %% etages suivants 0 1 nx 2 sub { /j exch def 1 1 ny { /i exch def [i j ny mul add i ny add j ny mul add i ny mod ny add 1 add j ny mul add i ny mod 1 add j ny mul add] } for } for ] def %% tableau des sommets /S [ 0 0 0 1 1 nx { /j exch def 1 1 ny { /i exch def /theta i 360 mul ny div def theta cos r j mul nx div mul theta sin r j mul nx div mul 2 copy f_surface } for } for ] def S F generesolid end } def