%% 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
|