summaryrefslogtreecommitdiff
path: root/Master/texmf/doc/asymptote/examples/SierpinskiSponge.asy
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf/doc/asymptote/examples/SierpinskiSponge.asy')
-rw-r--r--Master/texmf/doc/asymptote/examples/SierpinskiSponge.asy42
1 files changed, 42 insertions, 0 deletions
diff --git a/Master/texmf/doc/asymptote/examples/SierpinskiSponge.asy b/Master/texmf/doc/asymptote/examples/SierpinskiSponge.asy
new file mode 100644
index 00000000000..209c3d182ed
--- /dev/null
+++ b/Master/texmf/doc/asymptote/examples/SierpinskiSponge.asy
@@ -0,0 +1,42 @@
+size(200);
+import palette;
+import three;
+
+triple[] M={
+ (-1,-1,-1),(0,-1,-1),(1,-1,-1),(1,0,-1),
+ (1,1,-1),(0,1,-1),(-1,1,-1),(-1,0,-1),
+ (-1,-1,0),(1,-1,0),(1,1,0),(-1,1,0),
+ (-1,-1,1),(0,-1,1),(1,-1,1),(1,0,1),
+ (1,1,1),(0,1,1),(-1,1,1),(-1,0,1)
+};
+
+triple[] K={
+ (1,-1,-1),(1,0,-1),(1,1,-1),(1,1,0),
+ (1,1,1),(1,0,1),(1,-1,1),(1,-1,0),
+ (0,0,-1),(0,0,1),(0,-1,0),(0,1,0)
+};
+
+surface s;
+
+void recur(triple p, real u, int level) {
+ if(level > 1 )
+ for(triple V : M)
+ recur(p+u*V,u/3,level-1);
+ else
+ for(triple V : K) {
+ transform3 T=shift(p)*scale3(u)*shift(V)*scale3(0.5);
+ surface t=T*surface((1,-1,-1)--(1,1,-1)--(1,1,1)--(1,-1,1)--cycle);
+ s.append(t);
+ s.append(scale3(-1)*t);
+ }
+}
+
+recur((0,0,0),1/3,3);
+
+surface sf;
+sf.append(s);
+sf.append(rotate(90,Y)*s);
+sf.append(rotate(90,Z)*s);
+sf.colors(palette(sf.map(abs),Rainbow()));
+
+draw(sf);