summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/dvips/pst-solides3d/pst-implicitsurface.pro
blob: 6c711efd953e7617df62178f000efa9a2210ac26 (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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
%
% Based on Paul Bourke's implementation
% http://paulbourke.net/geometry/polygonise/
%
%% Manuel Luque/ Herbert Voß
%
%% version 0.01  2016/12/10
%
SolidesDict begin% Part of pst-solides3d
%
/MarchingCubes {
% 10 dict begin
  /edgeTable[0 265 515 778 1030 1295 1541 1804
           2060 2309 2575 2822 3082 3331 3593 3840
           400 153 915 666 1430 1183 1941 1692
           2460 2197 2975 2710 3482 3219 3993 3728
           560 825 51 314 1590 1855 1077 1340
           2620 2869 2111 2358 3642 3891 3129 3376
           928 681 419 170 1958 1711 1445 1196
           2988 2725 2479 2214 4010 3747 3497 3232
           1120 1385 1635 1898 102 367 613 876
           3180 3429 3695 3942 2154 2403 2665 2912
           1520 1273 2035 1786 502 255 1013 764
           3580 3317 4095 3830 2554 2291 3065 2800
           1616 1881 1107 1370 598 863 85 348
           3676 3925 3167 3414 2650 2899 2137 2384
           1984 1737 1475 1226 966 719 453 204
           4044 3781 3535 3270 3018 2755 2505 2240
           2240 2505 2755 3018 3270 3535 3781 4044
           204 453 719 966 1226 1475 1737 1984
           2384 2137 2899 2650 3414 3167 3925 3676
           348 85 863 598 1370 1107 1881 1616
           2800 3065 2291 2554 3830 4095 3317 3580
           764 1013 255 502 1786 2035 1273 1520
           2912 2665 2403 2154 3942 3695 3429 3180
           876 613 367 102 1898 1635 1385 1120
           3232 3497 3747 4010 2214 2479 2725 2988
           1196 1445 1711 1958 170 419 681 928
           3376 3129 3891 3642 2358 2111 2869 2620
           1340 1077 1855 1590 314 51 825 560
           3728 3993 3219 3482 2710 2975 2197 2460
           1692 1941 1183 1430 666 915 153 400
           3840 3593 3331 3082 2822 2575 2309 2060
           1804 1541 1295 1030 778 515 265 0] def
  /triTable [
      []
      [0 8 3]
      [0 1 9]
      [1 8 3 9 8 1]
      [1 2 10]
      [0 8 3 1 2 10]
      [9 2 10 0 2 9]
      [2 8 3 2 10 8 10 9 8]
      [3 11 2]
      [0 11 2 8 11 0]
      [1 9 0 2 3 11]
      [1 11 2 1 9 11 9 8 11]
      [3 10 1 11 10 3]
      [0 10 1 0 8 10 8 11 10]
      [3 9 0 3 11 9 11 10 9]
      [9 8 10 10 8 11]
      [4 7 8]
      [4 3 0 7 3 4]
      [0 1 9 8 4 7]
      [4 1 9 4 7 1 7 3 1]
      [1 2 10 8 4 7]
      [3 4 7 3 0 4 1 2 10]
      [9 2 10 9 0 2 8 4 7]
      [2 10 9 2 9 7 2 7 3 7 9 4]
      [8 4 7 3 11 2]
      [11 4 7 11 2 4 2 0 4]
      [9 0 1 8 4 7 2 3 11]
      [4 7 11 9 4 11 9 11 2 9 2 1]
      [3 10 1 3 11 10 7 8 4]
      [1 11 10 1 4 11 1 0 4 7 11 4]
      [4 7 8 9 0 11 9 11 10 11 0 3]
      [4 7 11 4 11 9 9 11 10]
      [9 5 4]
      [9 5 4 0 8 3]
      [0 5 4 1 5 0]
      [8 5 4 8 3 5 3 1 5]
      [1 2 10 9 5 4]
      [3 0 8 1 2 10 4 9 5]
      [5 2 10 5 4 2 4 0 2]
      [2 10 5 3 2 5 3 5 4 3 4 8]
      [9 5 4 2 3 11]
      [0 11 2 0 8 11 4 9 5]
      [0 5 4 0 1 5 2 3 11]
      [2 1 5 2 5 8 2 8 11 4 8 5]
      [10 3 11 10 1 3 9 5 4]
      [4 9 5 0 8 1 8 10 1 8 11 10]
      [5 4 0 5 0 11 5 11 10 11 0 3]
      [5 4 8 5 8 10 10 8 11]
      [9 7 8 5 7 9]
      [9 3 0 9 5 3 5 7 3]
      [0 7 8 0 1 7 1 5 7]
      [1 5 3 3 5 7]
      [9 7 8 9 5 7 10 1 2]
      [10 1 2 9 5 0 5 3 0 5 7 3]
      [8 0 2 8 2 5 8 5 7 10 5 2]
      [2 10 5 2 5 3 3 5 7]
      [7 9 5 7 8 9 3 11 2]
      [9 5 7 9 7 2 9 2 0 2 7 11]
      [2 3 11 0 1 8 1 7 8 1 5 7]
      [11 2 1 11 1 7 7 1 5]
      [9 5 8 8 5 7 10 1 3 10 3 11]
      [5 7 0 5 0 9 7 11 0 1 0 10 11 10 0]
      [11 10 0 11 0 3 10 5 0 8 0 7 5 7 0]
      [11 10 5 7 11 5]
      [10 6 5]
      [0 8 3 5 10 6]
      [9 0 1 5 10 6]
      [1 8 3 1 9 8 5 10 6]
      [1 6 5 2 6 1]
      [1 6 5 1 2 6 3 0 8]
      [9 6 5 9 0 6 0 2 6]
      [5 9 8 5 8 2 5 2 6 3 2 8]
      [2 3 11 10 6 5]
      [11 0 8 11 2 0 10 6 5]
      [0 1 9 2 3 11 5 10 6]
      [5 10 6 1 9 2 9 11 2 9 8 11]
      [6 3 11 6 5 3 5 1 3]
      [0 8 11 0 11 5 0 5 1 5 11 6]
      [3 11 6 0 3 6 0 6 5 0 5 9]
      [6 5 9 6 9 11 11 9 8]
      [5 10 6 4 7 8]
      [4 3 0 4 7 3 6 5 10]
      [1 9 0 5 10 6 8 4 7]
      [10 6 5 1 9 7 1 7 3 7 9 4]
      [6 1 2 6 5 1 4 7 8]
      [1 2 5 5 2 6 3 0 4 3 4 7]
      [8 4 7 9 0 5 0 6 5 0 2 6]
      [7 3 9 7 9 4 3 2 9 5 9 6 2 6 9]
      [3 11 2 7 8 4 10 6 5]
      [5 10 6 4 7 2 4 2 0 2 7 11]
      [0 1 9 4 7 8 2 3 11 5 10 6]
      [9 2 1 9 11 2 9 4 11 7 11 4 5 10 6]
      [8 4 7 3 11 5 3 5 1 5 11 6]
      [5 1 11 5 11 6 1 0 11 7 11 4 0 4 11]
      [0 5 9 0 6 5 0 3 6 11 6 3 8 4 7]
      [6 5 9 6 9 11 4 7 9 7 11 9]
      [10 4 9 6 4 10]
      [4 10 6 4 9 10 0 8 3]
      [10 0 1 10 6 0 6 4 0]
      [8 3 1 8 1 6 8 6 4 6 1 10]
      [1 4 9 1 2 4 2 6 4]
      [3 0 8 1 2 9 2 4 9 2 6 4]
      [0 2 4 4 2 6]
      [8 3 2 8 2 4 4 2 6]
      [10 4 9 10 6 4 11 2 3]
      [0 8 2 2 8 11 4 9 10 4 10 6]
      [3 11 2 0 1 6 0 6 4 6 1 10]
      [6 4 1 6 1 10 4 8 1 2 1 11 8 11 1]
      [9 6 4 9 3 6 9 1 3 11 6 3]
      [8 11 1 8 1 0 11 6 1 9 1 4 6 4 1]
      [3 11 6 3 6 0 0 6 4]
      [6 4 8 11 6 8]
      [7 10 6 7 8 10 8 9 10]
      [0 7 3 0 10 7 0 9 10 6 7 10]
      [10 6 7 1 10 7 1 7 8 1 8 0]
      [10 6 7 10 7 1 1 7 3]
      [1 2 6 1 6 8 1 8 9 8 6 7]
      [2 6 9 2 9 1 6 7 9 0 9 3 7 3 9]
      [7 8 0 7 0 6 6 0 2]
      [7 3 2 6 7 2]
      [2 3 11 10 6 8 10 8 9 8 6 7]
      [2 0 7 2 7 11 0 9 7 6 7 10 9 10 7]
      [1 8 0 1 7 8 1 10 7 6 7 10 2 3 11]
      [11 2 1 11 1 7 10 6 1 6 7 1]
      [8 9 6 8 6 7 9 1 6 11 6 3 1 3 6]
      [0 9 1 11 6 7]
      [7 8 0 7 0 6 3 11 0 11 6 0]
      [7 11 6]
      [7 6 11]
      [3 0 8 11 7 6]
      [0 1 9 11 7 6]
      [8 1 9 8 3 1 11 7 6]
      [10 1 2 6 11 7]
      [1 2 10 3 0 8 6 11 7]
      [2 9 0 2 10 9 6 11 7]
      [6 11 7 2 10 3 10 8 3 10 9 8]
      [7 2 3 6 2 7]
      [7 0 8 7 6 0 6 2 0]
      [2 7 6 2 3 7 0 1 9]
      [1 6 2 1 8 6 1 9 8 8 7 6]
      [10 7 6 10 1 7 1 3 7]
      [10 7 6 1 7 10 1 8 7 1 0 8]
      [0 3 7 0 7 10 0 10 9 6 10 7]
      [7 6 10 7 10 8 8 10 9]
      [6 8 4 11 8 6]
      [3 6 11 3 0 6 0 4 6]
      [8 6 11 8 4 6 9 0 1]
      [9 4 6 9 6 3 9 3 1 11 3 6]
      [6 8 4 6 11 8 2 10 1]
      [1 2 10 3 0 11 0 6 11 0 4 6]
      [4 11 8 4 6 11 0 2 9 2 10 9]
      [10 9 3 10 3 2 9 4 3 11 3 6 4 6 3]
      [8 2 3 8 4 2 4 6 2]
      [0 4 2 4 6 2]
      [1 9 0 2 3 4 2 4 6 4 3 8]
      [1 9 4 1 4 2 2 4 6]
      [8 1 3 8 6 1 8 4 6 6 10 1]
      [10 1 0 10 0 6 6 0 4]
      [4 6 3 4 3 8 6 10 3 0 3 9 10 9 3]
      [10 9 4 6 10 4]
      [4 9 5 7 6 11]
      [0 8 3 4 9 5 11 7 6]
      [5 0 1 5 4 0 7 6 11]
      [11 7 6 8 3 4 3 5 4 3 1 5]
      [9 5 4 10 1 2 7 6 11]
      [6 11 7 1 2 10 0 8 3 4 9 5]
      [7 6 11 5 4 10 4 2 10 4 0 2]
      [3 4 8 3 5 4 3 2 5 10 5 2 11 7 6]
      [7 2 3 7 6 2 5 4 9]
      [9 5 4 0 8 6 0 6 2 6 8 7]
      [3 6 2 3 7 6 1 5 0 5 4 0]
      [6 2 8 6 8 7 2 1 8 4 8 5 1 5 8]
      [9 5 4 10 1 6 1 7 6 1 3 7]
      [1 6 10 1 7 6 1 0 7 8 7 0 9 5 4]
      [4 0 10 4 10 5 0 3 10 6 10 7 3 7 10]
      [7 6 10 7 10 8 5 4 10 4 8 10]
      [6 9 5 6 11 9 11 8 9]
      [3 6 11 0 6 3 0 5 6 0 9 5]
      [0 11 8 0 5 11 0 1 5 5 6 11]
      [6 11 3 6 3 5 5 3 1]
      [1 2 10 9 5 11 9 11 8 11 5 6]
      [0 11 3 0 6 11 0 9 6 5 6 9 1 2 10]
      [11 8 5 11 5 6 8 0 5 10 5 2 0 2 5]
      [6 11 3 6 3 5 2 10 3 10 5 3]
      [5 8 9 5 2 8 5 6 2 3 8 2]
      [9 5 6 9 6 0 0 6 2]
      [1 5 8 1 8 0 5 6 8 3 8 2 6 2 8]
      [1 5 6 2 1 6]
      [1 3 6 1 6 10 3 8 6 5 6 9 8 9 6]
      [10 1 0 10 0 6 9 5 0 5 6 0]
      [0 3 8 5 6 10]
      [10 5 6]
      [11 5 10 7 5 11]
      [11 5 10 11 7 5 8 3 0]
      [5 11 7 5 10 11 1 9 0]
      [10 7 5 10 11 7 9 8 1 8 3 1]
      [11 1 2 11 7 1 7 5 1]
      [0 8 3 1 2 7 1 7 5 7 2 11]
      [9 7 5 9 2 7 9 0 2 2 11 7]
      [7 5 2 7 2 11 5 9 2 3 2 8 9 8 2]
      [2 5 10 2 3 5 3 7 5]
      [8 2 0 8 5 2 8 7 5 10 2 5]
      [9 0 1 5 10 3 5 3 7 3 10 2]
      [9 8 2 9 2 1 8 7 2 10 2 5 7 5 2]
      [1 3 5 3 7 5]
      [0 8 7 0 7 1 1 7 5]
      [9 0 3 9 3 5 5 3 7]
      [9 8 7 5 9 7]
      [5 8 4 5 10 8 10 11 8]
      [5 0 4 5 11 0 5 10 11 11 3 0]
      [0 1 9 8 4 10 8 10 11 10 4 5]
      [10 11 4 10 4 5 11 3 4 9 4 1 3 1 4]
      [2 5 1 2 8 5 2 11 8 4 5 8]
      [0 4 11 0 11 3 4 5 11 2 11 1 5 1 11]
      [0 2 5 0 5 9 2 11 5 4 5 8 11 8 5]
      [9 4 5 2 11 3]
      [2 5 10 3 5 2 3 4 5 3 8 4]
      [5 10 2 5 2 4 4 2 0]
      [3 10 2 3 5 10 3 8 5 4 5 8 0 1 9]
      [5 10 2 5 2 4 1 9 2 9 4 2]
      [8 4 5 8 5 3 3 5 1]
      [0 4 5 1 0 5]
      [8 4 5 8 5 3 9 0 5 0 3 5]
      [9 4 5]
      [4 11 7 4 9 11 9 10 11]
      [0 8 3 4 9 7 9 11 7 9 10 11]
      [1 10 11 1 11 4 1 4 0 7 4 11]
      [3 1 4 3 4 8 1 10 4 7 4 11 10 11 4]
      [4 11 7 9 11 4 9 2 11 9 1 2]
      [9 7 4 9 11 7 9 1 11 2 11 1 0 8 3]
      [11 7 4 11 4 2 2 4 0]
      [11 7 4 11 4 2 8 3 4 3 2 4]
      [2 9 10 2 7 9 2 3 7 7 4 9]
      [9 10 7 9 7 4 10 2 7 8 7 0 2 0 7]
      [3 7 10 3 10 2 7 4 10 1 10 0 4 0 10]
      [1 10 2 8 7 4]
      [4 9 1 4 1 7 7 1 3]
      [4 9 1 4 1 7 0 8 1 8 7 1]
      [4 0 3 7 4 3]
      [4 8 7]
      [9 10 8 10 11 8]
      [3 0 9 3 9 11 11 9 10]
      [0 1 10 0 10 8 8 10 11]
      [3 1 10 11 3 10]
      [1 2 11 1 11 9 9 11 8]
      [3 0 9 3 9 11 1 2 9 2 11 9]
      [0 2 11 8 0 11]
      [3 2 11]
      [2 3 8 2 8 10 10 8 9]
      [9 10 2 0 9 2]
      [2 3 8 2 8 10 0 1 8 1 10 8]
      [1 10 2]
      [1 3 8 9 1 8]
      [0 9 1]
      [0 3 8]
      []
  ] def
  % les 10 arêtes du cube : numéros des sommets des extrémités Paul Bourke
  /edgeIndex[ [0 1] [1 2] [2 3] [3 0] [4 5] [5 6] [6 7] [7 4] [0 4] [1 5] [2 6] [3 7] ] def
%
  /makeVolume {% isosurface => min & max & dt  (extraire les plages de variations et les pas)
    /baseX plagesXYZ 0 get def
    /xMin baseX 0 get def
    /xMax baseX 1 get def
    /dx baseX 2 get def
    /baseY plagesXYZ 1 get def
    /yMin baseY 0 get def
    /yMax baseY 1 get def
    /dy baseY 2 get def
    /baseZ plagesXYZ 2 get def
    /zMin baseZ 0 get def
    /zMax baseZ 1 get def
    /dz baseZ 2 get def
  } def
%
  /calculs {
    20 dict begin
    makeVolume
    % les cubes
    /cubes [% les sommets
      zMin dz zMax { /z exch def
        yMin dy yMax { /y exch def
          xMin dx xMax { 
            /x exch def
	    [% un cube
	      [x y z]                      % 0
	      [x y dy add z ]              % 1
	      [x dx add y dy add z]        % 2
	      [x dx add y z]               % 3
	      [x y z dz add]               % 4
	      [x y dy add z dz add]        % 5
	      [x dx add y dy add z dz add] % 6
	      [x dx add y z dz add]        % 7
	    ]
	  } for
        } for
      } for
    ] def
%
    /valeurs [% les isovaleurs
      zMin dz zMax {/z exch def
        yMin dy yMax {/y exch def
	  xMin dx xMax {/x exch def
	    [ x y z function                      % 0
	      x y dy add z function               % 1
	      x dx add y dy add z function        % 2
	      x dx add y z function               % 3
	      x y z dz add function               % 4
	      x y dy add z dz add function        % 5
	      x dx add y dy add z dz add function % 6
	      x dx add y z dz add function        % 7
	    ]
          } for
        } for
      } for
    ] def
    % quelques idées du codage ont été prises à https://mikolalysenko.github.io/Isosurface/
    /aretes 12 array def % 12 aretes
    /sommets[] def
    /Faces[] def
    % parcourir tous les mini-cubes
    0 1 cubes length 1 sub {
      /i exch def
      /cube cubes i get def % le cube et les 8 sommets
      /valeur valeurs i get def % les valeurs des sommets
      /cube_index 0 def
      0 1 7 { 
        /j exch def
        /v valeur j get def
        v 0 gt { /cube_index cube_index 2 j exp cvi or def} if %
      } for
      /edge_mask edgeTable cube_index get cvi def
      edge_mask 0 ne {
        0 1 11 {
	  /k exch def
          edge_mask 2 k exp cvi and 0 ne {
	    aretes k sommets length cvi put
	    /nv [0 0 0] def
	    /e edgeIndex k get def
	    /p0 cube e 0 get get def
	    /p1 cube e 1 get get def
	    /v0 valeur e 0 get get def
	    /v1 valeur e 1 get get def
	    /dv v0 v1 sub def
	    /mu 0 def
	    dv abs 1e-6 gt { /mu v0 dv div def } if
	    0 1 2 {
	      /J exch def
	      nv J p0 J get mu p1 J get p0 J get sub mul add put
	    } for
	    [ sommets aload pop nv ] /sommets exch def
	  } if
        } for
      } if
      % add faces
      /f triTable cube_index get def
      0 3 f length 3 sub {
        /I exch def
        [ Faces aload pop [ aretes f I 2 add get get aretes f I 1 add get get aretes f I get get ]] 
        /Faces exch def
      } for
    } for
    Faces
    sommets
    end
  } def  % end /calculs
} def    % end /MarchingCubes
%
end % SolidesDict