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