tikz 中的嵌套 ifthenelse 在任意更改后失败

tikz 中的嵌套 ifthenelse 在任意更改后失败

尝试绘制一个随机聚合物网格,我打算通过在 (x,0) 和 (x,1) 之间绘制一系列随机游动来将其可视化,其中 x 是任意的。我的第一次尝试已完成,并且已编译。但如果我更改某些内容,它会给出错误消息“Package tikz 错误:放弃此路径。您忘记了分号吗?}}”鉴于此,我的第一次尝试并未取得任何进展。

我所说的“某些事情”是指,例如删除“nicefrac”或有时任意更改 \foreach 语句。或者,即使我将坐标 A 的起始坐标更改为例如 (rand,rnd)。

那么下面的代码显然并不理想。如果线条没有画得非常细,那么每个关节处都会有难看的缝隙,会出现我不明白的错误信息。那么,我怎样才能更好地绘制杂乱的网格呢?

规则很简单:网格中的每个聚合物链都绘制为一组长度相等的连接段。这些连接段之间的接头应仅能偏离一定角度(取决于聚合物刚度),并且它们都应保持在绘制表面的给定距离内。如果达到此极限,则聚合物将根据情况向下或向上弯曲。

\documentclass{article}
\usepackage{tikz}
\usepackage{nicefrac}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{calc}
\newcommand*{\ExtractCoordinate}[1]{\path (#1); \pgfgetlastxy{\XCoord}{\YCoord};}%

\begin{document}
\begin{tikzpicture}
\clip (-.5,-.5)rectangle(.5,2);


\foreach \x in {-1.0,-.9,...,1}{
\draw[ultra thin] (\x,0.1) coordinate[name=A];
\foreach \y in {0,.2,...,10}{


\ExtractCoordinate{A}
    \ifthenelse{\lengthtest{\YCoord <28 pt}}%Checked if below 1.
    {%Is below 1.
    \ifthenelse{\lengthtest{\YCoord >0 pt}}{%Check if above 0
    \draw[ultra thin] (A)--++(rand*120:.05) coordinate[name=A];%Yes, above zero
    }{\draw[ultra thin] (A)--++(rnd*89:.05) coordinate[name=A];}%NOT above zero
    }%Is not below 1
    {\draw[ultra thin] (A)--++(-rnd*89:.05) coordinate=name=A];
    }%ELSE 1
    }}
    \draw[fill=blue!15] (-1,0)rectangle(1,-1);%surface coated by the mesh
\end{tikzpicture}
\end{document} 

代码结果类似于此: 网格首次尝试
或者这样,具有正常的线条粗细:
粗线网格

这与我想要的结果非常接近,尽管我想稍微调整一下角度的行为,以便可以改变每个聚合物段的弯曲程度(从而模拟不同的聚合物刚度)。此外,此时,所有聚合物都倾向于向右移动,它们的运动并不是真正随机的,而是朝着一个方向。

答案1

我不知道剪切路径或底部的矩形。但您可以轻松地在一条路径上绘制一条随机线。

我使用坐标作为因子的参考,c-0而不是使用单位,该计算将基于 PGF/TikZ 的坐标系。c-1randpt

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[
  line join=round, line cap=round,
  inner sep=+1pt, near end, nodes={fill=white}]
\path[very thin] coordinate (c-0) at (-1,0) (c-0) edge node {0} ++(right:5)
                 coordinate (c-1) at (-1,1) (c-1) edge node {1} ++(right:5);
\foreach \x[evaluate={\col=((\x+1)/2)*100}] in {-1.0, -.9, ..., 1}
  \draw[color=blue!\col!red] (\x, .5) \foreach \cnt in {1,...,50}{
    coordinate (@) let \p0=($(@)-(c-1)$),
                       \p1=($(@)-(c-0)$) in
                   -- ++ ({rand*ifthenelse(and(\x0>0,\x1<0),120,89)}:.05)};
\end{tikzpicture}
\end{document} 

输出

在此处输入图片描述

相关内容