Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- The cellular automata code was copied and pasted from:
- http://tex.stackexchange.com/questions/118377/drawing-multiple-iterations-of-cellular-automatons-inline-possibly-with-tikz
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \documentclass[11pt]{beamer}
- \usepackage{tikz}
- % Each cell is stored globally as a macro
- % for example \csname cell-glider-1-7\endcsname
- \def\setcell#1#2#3{%
- \pgfmathparse{int(#2)}\let\cx=\pgfmathresult%
- \pgfmathparse{int(#3)}\let\cy=\pgfmathresult%
- \expandafter\xdef\csname cell-#1-\cx-\cy\endcsname%
- }
- % Cells are accessed by parsing #2 and #3 to integers
- % and assigning the cell contents to the macro #4
- \def\getcell#1#2#3#4{%
- \pgfmathparse{int(#2)}\let\cx=\pgfmathresult%
- \pgfmathparse{int(#3)}\let\cy=\pgfmathresult%
- \def\marshal{\xdef#4}%
- \marshal{\csname cell-#1-\cx-\cy\endcsname}%
- }
- % We flip the current from `current' to `next'
- % which is probably misleading. The texts can be
- % any arbitrary string as long as they are different.
- \def\currenttext{current}
- \def\nexttext{next}
- \let\currentgeneration=\currenttext
- \let\nextgeneration=\nexttext
- \def\switchgenerations{%
- \ifx\currentgeneration\currenttext%
- \global\let\currentgeneration=\nexttext%
- \global\let\nextgeneration=\currenttext%
- \else%
- \global\let\currentgeneration=\currenttext%
- \global\let\nextgeneration=\nexttext%
- \fi%
- }
- % Define colors \csname color-#1\endcsname
- % Which can be used according to the cell contents
- % So \csname color-0\endcsname holds the color for cells with value 0
- \def\setcolor#1{\expandafter\xdef\csname color-#1\endcsname}
- \def\getcolor#1{\csname color-#1\endcsname}
- % Define a 10x10 board with a border of 1 so edge
- % detection is not necessary.
- \foreach \x in {0,...,11}{%
- \foreach \y in {0,...,11}{%
- \setcell{\currentgeneration}{\x}{\y}{0}%
- }% %
- }%
- % Copy this board for the next generation
- % This is HUGELY inefficient. What would be better is
- % to maintain a list of only changing cells (hard in LaTeX)
- \foreach \x in {0,...,11}{%
- \foreach \y in {0,...,11}{%
- \setcell{\nextgeneration}{\x}{\y}{0}%
- }%
- }
- \newcount\neighbors
- \def\updategenerations{%
- \begingroup\nullfont% Hmm lots of unwanted spaces occur here
- \foreach \x in {1,...,10}{%
- \foreach \y in {1,...,10}{%
- \getcell{\currentgeneration}{\x}{\y}{\n}%
- \getcell{\currentgeneration}{\x-1}{\y}{\a}%
- \getcell{\currentgeneration}{\x+1}{\y}{\b}%
- \getcell{\currentgeneration}{\x}{\y-1}{\c}%
- \getcell{\currentgeneration}{\x}{\y+1}{\d}%
- \getcell{\currentgeneration}{\x-1}{\y-1}{\e}%
- \getcell{\currentgeneration}{\x+1}{\y-1}{\f}
- \getcell{\currentgeneration}{\x-1}{\y+1}{\g}%
- \getcell{\currentgeneration}{\x+1}{\y+1}{\h}%
- \pgfmathsetcount\neighbors{\a+\b+\c+\d+\e+\f+\g+\h}%
- % Here are the neighbor rules
- \ifcase\neighbors %
- \setcell{\nextgeneration}{\x}{\y}{0}% 0 neighbors
- \or
- \setcell{\nextgeneration}{\x}{\y}{0}% 1 neighbors
- \or
- \ifnum\n=1\relax
- \setcell{\nextgeneration}{\x}{\y}{1}% 2 neighbors
- \fi
- \or
- \setcell{\nextgeneration}{\x}{\y}{1}% 3 neighbors
- \else
- \setcell{\nextgeneration}{\x}{\y}{0}% more than 3 neighbors
- \fi%
- }%
- }%
- \endgroup%
- \switchgenerations%
- }
- \def\drawcurrentgeneration{%}
- \begin{tikzpicture}[x=10pt,y=10pt]
- \foreach \x in {1,...,10}{%
- \foreach \y in {1,...,10}{%
- \setcell{\nextgeneration}{\x}{\y}{0}% Do here for a *minor* increment in speed
- \getcell{\currentgeneration}{\x}{\y}{\value}%
- \edef\c{\getcolor{\value}}%
- \fill [fill=\c](\x, \y) rectangle ++(1,1);
- }
- }
- \end{tikzpicture}%
- }
- \setcolor{0}{blue!5}
- \setcolor{1}{blue!20}
- \setcell{\currentgeneration}{1}{8}{1}
- \setcell{\currentgeneration}{2}{8}{1}
- \setcell{\currentgeneration}{3}{8}{1}
- \setcell{\currentgeneration}{3}{9}{1}
- \setcell{\currentgeneration}{2}{10}{1}
- \title{My Document}
- \author{Fufu Fang\\ University of East Anglia}
- \date{\today}
- \usetheme{CambridgeUS}
- \usecolortheme{beaver}
- \begin{document}
- \maketitle
- \begin{frame}
- \frametitle{Introduction}
- This is a document I created in UEA's \LaTeX\ class.
- \end{frame}
- \begin{frame}
- \frametitle{Iteration 0}
- \drawcurrentgeneration
- \end{frame}
- \foreach \iteration in {1,...,32}{
- \begin{frame}
- \frametitle{Iteration \iteration}
- \updategenerations
- \drawcurrentgeneration
- \end{frame}
- }
- \end{document}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement