场地渗透图

场地渗透图

我试图创建一个定向站点渗透图,遵循与该问题类似的方法:使用 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

这现在更像是一个答案。由于您只比较nn+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。

相关内容