Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

73 řádky
2.2KB

  1. % Draw Hilbert curves.
  2. % Credits: Based on code by Marc van Dongen
  3. % See: http://www.fauskes.net/pgftikzexamples/hilbert-curve/
  4. \title{Hilbert Curves}
  5. \author{}
  6. \date{}
  7. \documentclass{tufte-handout}
  8. \usepackage{tikz}
  9. \usepackage[active,tightpage]{preview}
  10. \PreviewEnvironment{tikzpicture}
  11. \usetikzlibrary{positioning}
  12. \begin{document}
  13. \newdimen\HilbertLastX
  14. \newdimen\HilbertLastY
  15. \newcounter{HilbertOrder}
  16. \def\DrawToNext#1#2{%
  17. \advance \HilbertLastX by #1
  18. \advance \HilbertLastY by #2
  19. \pgfpathlineto{\pgfqpoint{\HilbertLastX}{\HilbertLastY}}
  20. % Alternative implementation using plot streams:
  21. % \pgfplotstreampoint{\pgfqpoint{\HilbertLastX}{\HilbertLastY}}
  22. }
  23. % \Hilbert[right_x,right_y,left_x,left_x,up_x,up_y,down_x,down_y]
  24. \def\Hilbert[#1,#2,#3,#4,#5,#6,#7,#8] {
  25. \ifnum\value{HilbertOrder} > 0%
  26. \addtocounter{HilbertOrder}{-1}
  27. \Hilbert[#5,#6,#7,#8,#1,#2,#3,#4]
  28. \DrawToNext {#1} {#2}
  29. \Hilbert[#1,#2,#3,#4,#5,#6,#7,#8]
  30. \DrawToNext {#5} {#6}
  31. \Hilbert[#1,#2,#3,#4,#5,#6,#7,#8]
  32. \DrawToNext {#3} {#4}
  33. \Hilbert[#7,#8,#5,#6,#3,#4,#1,#2]
  34. \addtocounter{HilbertOrder}{1}
  35. \fi
  36. }
  37. % \hilbert((x,y),order)
  38. \def\hilbert((#1,#2),#3){%
  39. \advance \HilbertLastX by #1
  40. \advance \HilbertLastY by #2
  41. \pgfpathmoveto{\pgfqpoint{\HilbertLastX}{\HilbertLastY}}
  42. % Alternative implementation using plot streams:
  43. % \pgfplothandlerlineto
  44. % \pgfplotstreamstart
  45. % \pgfplotstreampoint{\pgfqpoint{\HilbertLastX}{\HilbertLastY}}
  46. \setcounter{HilbertOrder}{#3}
  47. \Hilbert[1mm,0mm,-1mm,0mm,0mm,1mm,0mm,-1mm]
  48. \pgfusepath{stroke}%
  49. }
  50. \def\scalefac{1}
  51. \maketitle
  52. \begin{figure}[h!]
  53. \begin{tikzpicture}[node distance=0cm,every path/.style={thin}]
  54. \node[label={above:$n=1$}] (n1) {\tikz[scale=\scalefac*18] \hilbert((0mm,0mm),1);};
  55. \node[label={above:$n=2$},right=of n1] (n2) {\tikz[scale=\scalefac*6] \hilbert((0mm,0mm),2);};
  56. \node[label={above:$n=3$},right=of n2] (n3) {\tikz[scale=\scalefac*2.6] \hilbert((0mm,0mm),3);};
  57. \node[label={above:$n=4$},right=of n3] (n4) {\tikz[scale=\scalefac*1.2] \hilbert((0mm,0mm),4);};
  58. \node[label={above:$n=5$},right=of n4] (n5) {\tikz[scale=\scalefac*0.58] \hilbert((0mm,0mm),5);};
  59. \end{tikzpicture}
  60. \end{figure}
  61. \end{document}