blob: e9098dba8b32f68afa83331ba8080ae1ad82ee97 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
%% $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
%
%
|