# asympt04

Jan 26th, 2015
2,224
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. \begin{asy}
2. size(200);
3. import palette;
4. import three;
5.
6. currentprojection=orthographic(1,1,1);
7.
8. triple[] M={
9.   (-1,-1,-1),(0,-1,-1),(1,-1,-1),(1,0,-1),
10.   (1,1,-1),(0,1,-1),(-1,1,-1),(-1,0,-1),
11.   (-1,-1,0),(1,-1,0),(1,1,0),(-1,1,0),
12.   (-1,-1,1),(0,-1,1),(1,-1,1),(1,0,1),(1,1,1),(0,1,1),(-1,1,1),(-1,0,1)
13. };
14.
15. surface[] Squares={
16.   surface((1,-1,-1)--(1,1,-1)--(1,1,1)--(1,-1,1)--cycle),
17.   surface((-1,-1,-1)--(-1,1,-1)--(-1,1,1)--(-1,-1,1)--cycle),
18.   surface((1,1,-1)--(-1,1,-1)--(-1,1,1)--(1,1,1)--cycle),
19.   surface((1,-1,-1)--(-1,-1,-1)--(-1,-1,1)--(1,-1,1)--cycle),
20.   surface((1,-1,1)--(1,1,1)--(-1,1,1)--(-1,-1,1)--cycle),
21.   surface((1,-1,-1)--(1,1,-1)--(-1,1,-1)--(-1,-1,-1)--cycle),
22. };
23.
24. int[][] SquaresPoints={
25.   {2,3,4,10,16,15,14,9},
26.   {0,7,6,11,18,19,12,8},
27.   {4,5,6,11,18,17,16,10},
28.   {2,1,0,8,12,13,14,9},
29.   {12,13,14,15,16,17,18,19},
30.   {0,1,2,3,4,5,6,7}
31. };
32.
33. int[][] index={
34.   {0,2,4},{0,1},{1,2,4},{2,3},{1,3,4},{0,1},{0,3,4},{2,3},
35.   {4,5},{4,5},{4,5},{4,5},
36.   {0,2,5},{0,1},{1,2,5},{2,3},{1,3,5},{0,1},{0,3,5},{2,3}
37. };
38.
39. int[] Sponge0=array(n=6,value=1);
40.
41. int[] eraseFaces(int n, int[] Sponge0) {
42.   int[] temp=copy(Sponge0);
43.   for(int k : index[n]) {
44.     temp[k]=0;
45.   }
46.   return temp;
47. }
48.
49. int[][] Sponge1=new int[20][];
50. for(int n=0; n < 20; ++n) {
51.   Sponge1[n]=eraseFaces(n,Sponge0);
52. }
53.
54. int[][] eraseFaces(int n, int[][] Sponge1) {
55.   int[][] temp=copy(Sponge1);
56.   for(int k : index[n])
57.     for(int n1 : SquaresPoints[k])
58.       temp[n1][k]=0;
59.   return temp;
60. }
61.
62. int[][][] Sponge2=new int[20][][];
63. for(int n=0; n < 20; ++n)
64.   Sponge2[n]=eraseFaces(n,Sponge1);
65.
66. int[][][] eraseFaces(int n, int[][][] Sponge2) {
67.   int[][][] temp=copy(Sponge2);
68.   for(int k : index[n])
69.     for(int n2: SquaresPoints[k])
70.       for(int n1: SquaresPoints[k])
71.         temp[n2][n1][k]=0;
72.   return temp;
73. }
74.
75. int[][][][] Sponge3=new int[20][][][];
76. for(int n=0; n < 20; ++n)
77.   Sponge3[n]=eraseFaces(n,Sponge2);
78.
79. surface s3;
80. real u=2/3;
81. for(int n3=0; n3 < 20; ++n3) {
82.   surface s2;
83.   for(int n2=0; n2 < 20; ++n2) {
84.     surface s1;
85.     for(int n1=0; n1 < 20; ++n1) {
86.       for(int k=0; k < 6; ++k){
87.         transform3 T=scale3(u)*shift(M[n1])*scale3(0.5);
88.         if(Sponge3[n3][n2][n1][k] > 0) {
89.           s1.append(T*Squares[k]);
90.         }
91.       }
92.     }
93.     transform3 T=scale3(u)*shift(M[n2])*scale3(0.5);
94.     s2.append(T*s1);
95.   }
96.   transform3 T=scale3(u)*shift(M[n3])*scale3(0.5);
97.   s3.append(T*s2);
98. }
99. s3.colors(palette(s3.map(abs),Rainbow()));
100. draw(s3);
101.
102. \end{asy}