summaryrefslogtreecommitdiff
path: root/info/drawing-with-metapost/src/double-dragon.mp
diff options
context:
space:
mode:
Diffstat (limited to 'info/drawing-with-metapost/src/double-dragon.mp')
-rw-r--r--info/drawing-with-metapost/src/double-dragon.mp57
1 files changed, 57 insertions, 0 deletions
diff --git a/info/drawing-with-metapost/src/double-dragon.mp b/info/drawing-with-metapost/src/double-dragon.mp
new file mode 100644
index 0000000000..a701cbe8a0
--- /dev/null
+++ b/info/drawing-with-metapost/src/double-dragon.mp
@@ -0,0 +1,57 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{luamplib}
+\begin{document}
+\mplibtextextlabel{enable}
+\mplibnumbersystem{double}
+\begin{mplibcode}
+beginfig(1);
+
+vardef zinverse(expr z) = 1/abs z * dir - angle z enddef;
+
+vardef fizz(expr X) =
+ pair m, n;
+ m = right;
+ n = origin;
+ numeric a, x;
+ x = X;
+ forever:
+ exitif x = 0;
+ m := m zscaled zinverse((-1, 1));
+ a := x mod 2;
+ n := n + a * m;
+ x := x div 2;
+ endfor
+ n
+enddef;
+input colorbrewer-rgb
+color shade[];
+shade0 = Reds 5 4; shade1 = Oranges 5 4;
+shade2 = Greens 5 4; shade3 = Blues 5 4;
+
+beginfig(1);
+ numeric s, t; s = 256; t = 4;
+ for n=0 upto (s/t*s/t-1):
+ numeric h, v;
+ h = floor 1/8 (n mod 32);
+ v = n mod 4;
+ fill fullcircle scaled t shifted (fizz(n) scaled s)
+ withcolor (1/2 + 1/8 v)[white, shade[h]];
+ endfor;
+ path xx, yy;
+ xx = (left--right) scaled (s+8);
+ yy = xx rotated 90;
+ for i=-1 upto 1:
+ draw xx shifted (0, s*i) withpen pencircle scaled 1/8;
+ draw yy shifted (s*i, 0) withpen pencircle scaled 1/8;
+ endfor
+ dotlabel.lrt(btex $-1-i$ etex, (-1, -1) scaled s);
+ dotlabel.lrt(btex $-1$ etex, (-1, 0) scaled s);
+ dotlabel.lrt(btex $-1+i$ etex, (-1, 1) scaled s);
+ dotlabel.lrt(btex $-i$ etex, (0, -1) scaled s);
+ dotlabel.lrt(btex $+i$ etex, (0, 1) scaled s);
+ dotlabel.lrt(btex $+1-i$ etex, (1, -1) scaled s);
+ dotlabel.lrt(btex $+1$ etex, (1, 0) scaled s);
+ dotlabel.lrt(btex $+1+i$ etex, (1, 1) scaled s);
+endfig;
+\end{mplibcode}
+\end{document}