summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/asymptote/examples/SierpinskiGasket.asy
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/asymptote/examples/SierpinskiGasket.asy')
-rw-r--r--Master/texmf-dist/doc/asymptote/examples/SierpinskiGasket.asy31
1 files changed, 31 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/asymptote/examples/SierpinskiGasket.asy b/Master/texmf-dist/doc/asymptote/examples/SierpinskiGasket.asy
new file mode 100644
index 00000000000..2e0d4facd64
--- /dev/null
+++ b/Master/texmf-dist/doc/asymptote/examples/SierpinskiGasket.asy
@@ -0,0 +1,31 @@
+size(200);
+import palette;
+import three;
+currentprojection=perspective(8,2,1);
+
+triple[] M={(0,0,1),1/3*(sqrt(8),0,-1),
+ 1/3*((sqrt(8))*Cos(120),(sqrt(8))*Sin(120),-1),
+ 1/3*((sqrt(8))*Cos(240),(sqrt(8))*Sin(240),-1)};
+
+int level=5;
+
+surface s;
+
+void recur(triple p, real u, int l) {
+ if(l < level)
+ for(triple V : M)
+ recur(p+u*V,u/2,l+1);
+ else
+ for(triple V : M) {
+ s.append(surface((p+u*(V+M[0]))--(p+u*(V+M[1]))--(p+u*(V+M[2]))--cycle));
+ s.append(surface((p+u*(V+M[0]))--(p+u*(V+M[2]))--(p+u*(V+M[3]))--cycle));
+ s.append(surface((p+u*(V+M[0]))--(p+u*(V+M[3]))--(p+u*(V+M[1]))--cycle));
+ s.append(surface((p+u*(V+M[3]))--(p+u*(V+M[2]))--(p+u*(V+M[1]))--cycle));
+ }
+}
+
+recur(O,0.5,1);
+
+s.colors(palette(s.map(zpart),Rainbow()));
+
+draw(s,render(merge=true));