summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/dvips/pst-solides3d/pst-implicitsurface.pro
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-12-12 22:52:09 +0000
committerKarl Berry <karl@freefriends.org>2016-12-12 22:52:09 +0000
commit5440276d0dda2eb514887c87b7d9ab67c49d6a85 (patch)
treed049310bacc13fea75165368176f70542756a5e6 /Master/texmf-dist/dvips/pst-solides3d/pst-implicitsurface.pro
parentbb25bb8b4c057e717bace5e04140c0a0c4a75b88 (diff)
pst-solides3d (12dec16)
git-svn-id: svn://tug.org/texlive/trunk@42686 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/dvips/pst-solides3d/pst-implicitsurface.pro')
-rw-r--r--Master/texmf-dist/dvips/pst-solides3d/pst-implicitsurface.pro414
1 files changed, 414 insertions, 0 deletions
diff --git a/Master/texmf-dist/dvips/pst-solides3d/pst-implicitsurface.pro b/Master/texmf-dist/dvips/pst-solides3d/pst-implicitsurface.pro
new file mode 100644
index 00000000000..6c711efd953
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-solides3d/pst-implicitsurface.pro
@@ -0,0 +1,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