%% $Id: pst-antiprism.pro 522 2017-08-23 09:03:52Z herbert $
%% PostScript prologue for pst-antiprism.tex.
%%
%% Version 0.02, 2018/02/12
%%
%% For distribution, see pst-antiprism.tex.
%%
%%
/ps@antiprism { 12 dict begin
/n exch def % cotè du polygone
/a exch def % length on the antiprism side
/angle 360 n div def
% hauteur entre les 2 plans
/h a 1 1 angle 4 div cos 2 mul dup mul div sub sqrt mul 2 div def
% rayon du cercle circonscrit au polygone
/r a 2 div angle 2 div sin div def
% Les sommets des polygones réguliers supérieur et inférieur, alternativement
% inscrit dans un cercle de rayon 1
/sommets [ % 0->2n-1
0 1 n 1 sub {
/k exch def
angle k mul cos r mul
angle k mul sin r mul
h
k 0.5 add angle mul cos r mul
k 0.5 add angle mul sin r mul
h neg
} for
meshbases { % les centres de 2 faces polygonales
0 0 h % né 2n
0 0 h neg % né 2n+1
} if
] def
% les faces
/faces [
/i 0 def
n {
[0 i add 1 i add 2 i add ]
/i i 2 add def
} repeat
/i 0 def
n {
[1 i add 3 i add 2 i add ]
/i i 2 add def
} repeat
meshbases {
% les faces sup et inf en triangles
/i 0 def
n 1 sub {
[2 n mul 0 i add 2 i add ]
/i i 2 add def
} repeat
[2 n mul 2 n mul 2 sub 0 ]
/i 0 def
n 1 sub {
[2 n mul 1 add 3 i add 1 i add ]
/i i 2 add def
} repeat
[2 n mul 1 add 1 2 n mul 1 sub ]
}{ % face polygonale sup
[ 0 2 2 n mul 2 sub {} for ]
% face polygonale inf
[ 1 2 2 n mul 1 sub {} for ]
} ifelse
] def
faces n 1 sub get 2 0 put
faces 2 n mul 1 sub get 1 1 put
faces 2 n mul 1 sub get 2 0 put
% dans le cas oé les bases ne sont pas étoilées
% base sup = 2n
% base inf = 2n+1
%facessup faces 2 n mul get
%facesinf faces 2 n mul 1 get
%facestemp faces 0 2 n 1 sub getintervall
%
meshbases {}{
/faces1 faces faces length 2 sub 2 getinterval def
/faces2 faces 0 faces length 2 sub getinterval def
/faces [faces1 aload pop faces2 aload pop] def
} ifelse
sommets faces generesolid
end
} def
%
/ps@antiprism-fan {
10 dict begin
/n exch def
% coté du polygone
/a exch def % length on the antiprism side
/angle 360 n div def
% hauteur entre les 2 plans
/h a
1
1
angle 4 div cos 2 mul dup mul div sub sqrt mul 2 div def
% rayon du cercle circonscrit au polygone
/r a 2 div angle 2 div sin div def
% Les sommets des polygones r�guliers sup�rieur et inf�rieur, alternativement
% inscrit dans un cercle de rayon r
/sommets [ % 0->2n-1
0 1 n 1 sub {/k exch def
angle k mul cos r mul
angle k mul sin r mul
h
k 0.5 add angle mul cos r mul
k 0.5 add angle mul sin r mul
h neg
} for
% les centres de 2 faces polygonales
0 0 h % n� 2n
0 0 h neg % n� 2n+1
] def
% les faces
/faces [
0 2 n 2 mul 3 sub {/i exch def
[
i
i 1 add
2 n mul 1 add
2 n mul
]
[
i 1 add
i 2 add
2 n mul
2 n mul 1 add
]
} for
[
2 n mul
2 n mul 2 sub 2 n mul 1 sub 2 n mul 1 add
]
[
2 n mul 1 sub
0
2 n mul
2 n mul 1 add
]
] def
sommets faces generesolid
end
} def
%
/pst-antiprism-fan {
a n@ ps@antiprism-fan
gere_pstricks_opt
} def
%
/pst-antiprism {
a n@ ps@antiprism
gere_pstricks_opt
} def
%
%