From 5440276d0dda2eb514887c87b7d9ab67c49d6a85 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 12 Dec 2016 22:52:09 +0000 Subject: pst-solides3d (12dec16) git-svn-id: svn://tug.org/texlive/trunk@42686 c570f23f-e606-0410-a88d-b1316a301751 --- .../dvips/pst-solides3d/pst-implicitsurface.pro | 414 +++++++++++++++++++++ 1 file changed, 414 insertions(+) create mode 100644 Master/texmf-dist/dvips/pst-solides3d/pst-implicitsurface.pro (limited to 'Master/texmf-dist/dvips/pst-solides3d') 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 -- cgit v1.2.3