我试图创建一个定向站点渗透图,遵循与该问题类似的方法:使用 TikZ 绘制渗透配置。这个想法是,旋转格子上的每个坐标都以一定的概率“开放”(我在这里使用了 1/2)。然后,如果 (x',n') = (x+1,n+1) 或 (x-1,n+1) 也是开放的,那么对于每个“开放”坐标,我们在它们之间绘制一条路径。
到目前为止,我已经成功绘制了点阵,并尝试创建一个开放点列表,然后循环遍历点阵,测试它们之间的路径条件。点阵是前半部分,忽略 \gdef 和 \xdef 行并使用
\ifnum\pgfmathresult=0{\draw node[fill,circle,minimum size=0.2cm](\x,\n) {};}
我觉得我误解了如何在 TikZ 中创建列表,这也是为什么这似乎不起作用的根本原因。
如有任何帮助或解决方案我将不胜感激!
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
%
\begin{document}
\begin{tikzpicture}
\gdef\opennodes{}
\foreach \n in {1,2,...,50}{
\foreach \x in {1,2,...,50}{
\pgfmathrandominteger{\a}{1}{100}
\ifnum\a>50 % probability
\pgfmathparse{int(mod(\x+\n,2))}
\ifnum\pgfmathresult=0{node[fill,circle,minimum size=0.2cm](\x,\n) at (\x,\n) {};}
\xdef\opennodes{\opennodes (\x,\n),}
\fi
\fi
}
}
\foreach \n in {1,2,...,50}{
\foreach \x in {1,2,...,50}{
\if (\x,\n) in \opennodes and (\x+1,\n+1) in \opennodes
\draw ((\x,\n) -- (\x+1,\n+1))
\if (\x,\n) in \opennodes and (\x-1,\n+1) in \opennodes
\draw ((\x,\n) -- (\x-1,\n+1))
\fi
}
}
\end{tikzpicture}
\end{document}
答案1
这现在更像是一个答案。由于您只比较n
和n+1
,我会在一个循环中编写它。这也允许更简单的检查,因为不必循环遍历所有节点,并且只需存储一个坐标。还请注意,您的语句被评估为 false。最后,在比较\if (\x,\n) in \opennodes and (\x+1,\n+1) in \opennodes
之后让 LaTeX 放松一点可能会更好。\ifnum
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\def\PrevNode{0}
\begin{document}
\begin{tikzpicture}
\gdef\opennodes{}
\gdef\OldOpenNodes{}
\foreach \n in {1,2,...,50}{
\gdef\opennodes{-5}
\foreach \x [count=\nx] in {1,2,...,50}{
\def\PrevNode{0}
\pgfmathrandominteger{\a}{1}{100}
\ifnum\a>50\relax % probability
\pgfmathparse{int(mod(\x+\n,2))}
\ifnum\pgfmathresult=0\relax%
{\node[fill,circle,minimum size=0.2cm](\x,\n) at (\x,\n) {};}
\xdef\opennodes{\opennodes,\x}
\foreach \Node in \OldOpenNodes {
%\typeout{1:\Node}
\pgfmathtruncatemacro{\xDiffOne}{\x-\Node}
\ifnum\xDiffOne=2\relax
\def\PrevNode{1}
\fi
\ifnum\xDiffOne=1\relax
\draw (\x-1,\n-1) -- (\x,\n);
\ifnum\PrevNode=1\relax
\draw(\x-2,\n-1) -- (\x,\n);
\fi
\fi
}
\fi
\fi
}
\xdef\OldOpenNodes{\opennodes}
% \typeout{\n:\OldOpenNodes}
}
\end{tikzpicture}
\end{document}
\x+\n
我还要指出的是,可以通过选择更合适的边界条件来替换检查是否为偶数,从而简化代码\x
,即,如果\n
为奇数则为 1,如果\n
为偶数则为 2,并将步长设为 2。