summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/tufte-latex/graphics/hilbertrecursive.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/tufte-latex/graphics/hilbertrecursive.tex')
-rw-r--r--Master/texmf-dist/doc/latex/tufte-latex/graphics/hilbertrecursive.tex72
1 files changed, 72 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/tufte-latex/graphics/hilbertrecursive.tex b/Master/texmf-dist/doc/latex/tufte-latex/graphics/hilbertrecursive.tex
new file mode 100644
index 00000000000..dc30ec12893
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/tufte-latex/graphics/hilbertrecursive.tex
@@ -0,0 +1,72 @@
+% Draw Hilbert curves.
+% Credits: Based on code by Marc van Dongen
+% See: http://www.fauskes.net/pgftikzexamples/hilbert-curve/
+\title{Hilbert Curves}
+\author{}
+\date{}
+
+\documentclass{tufte-handout}
+
+\usepackage{tikz}
+
+\usepackage[active,tightpage]{preview}
+\PreviewEnvironment{tikzpicture}
+\usetikzlibrary{positioning}
+
+\begin{document}
+
+\newdimen\HilbertLastX
+\newdimen\HilbertLastY
+\newcounter{HilbertOrder}
+
+\def\DrawToNext#1#2{%
+ \advance \HilbertLastX by #1
+ \advance \HilbertLastY by #2
+ \pgfpathlineto{\pgfqpoint{\HilbertLastX}{\HilbertLastY}}
+ % Alternative implementation using plot streams:
+ % \pgfplotstreampoint{\pgfqpoint{\HilbertLastX}{\HilbertLastY}}
+}
+
+% \Hilbert[right_x,right_y,left_x,left_x,up_x,up_y,down_x,down_y]
+\def\Hilbert[#1,#2,#3,#4,#5,#6,#7,#8] {
+ \ifnum\value{HilbertOrder} > 0%
+ \addtocounter{HilbertOrder}{-1}
+ \Hilbert[#5,#6,#7,#8,#1,#2,#3,#4]
+ \DrawToNext {#1} {#2}
+ \Hilbert[#1,#2,#3,#4,#5,#6,#7,#8]
+ \DrawToNext {#5} {#6}
+ \Hilbert[#1,#2,#3,#4,#5,#6,#7,#8]
+ \DrawToNext {#3} {#4}
+ \Hilbert[#7,#8,#5,#6,#3,#4,#1,#2]
+ \addtocounter{HilbertOrder}{1}
+ \fi
+}
+
+
+% \hilbert((x,y),order)
+\def\hilbert((#1,#2),#3){%
+ \advance \HilbertLastX by #1
+ \advance \HilbertLastY by #2
+ \pgfpathmoveto{\pgfqpoint{\HilbertLastX}{\HilbertLastY}}
+ % Alternative implementation using plot streams:
+ % \pgfplothandlerlineto
+ % \pgfplotstreamstart
+ % \pgfplotstreampoint{\pgfqpoint{\HilbertLastX}{\HilbertLastY}}
+ \setcounter{HilbertOrder}{#3}
+ \Hilbert[1mm,0mm,-1mm,0mm,0mm,1mm,0mm,-1mm]
+ \pgfusepath{stroke}%
+}
+
+\def\scalefac{1}
+\maketitle
+
+\begin{figure}[h!]
+\begin{tikzpicture}[node distance=0cm,every path/.style={thin}]
+ \node[label={above:$n=1$}] (n1) {\tikz[scale=\scalefac*18] \hilbert((0mm,0mm),1);};
+ \node[label={above:$n=2$},right=of n1] (n2) {\tikz[scale=\scalefac*6] \hilbert((0mm,0mm),2);};
+ \node[label={above:$n=3$},right=of n2] (n3) {\tikz[scale=\scalefac*2.6] \hilbert((0mm,0mm),3);};
+ \node[label={above:$n=4$},right=of n3] (n4) {\tikz[scale=\scalefac*1.2] \hilbert((0mm,0mm),4);};
+ \node[label={above:$n=5$},right=of n4] (n5) {\tikz[scale=\scalefac*0.58] \hilbert((0mm,0mm),5);};
+\end{tikzpicture}
+\end{figure}
+\end{document}