答案1
我想到了一个部分解决方案。它只是迭代每一行并将其与前一行进行比较,如果坐标没有回绕,则只绘制它。但是,它不是最快的(实际上,它非常慢)。此外,它还不支持平滑线,所以如果有人知道更好的方法,请分享。
\begin{tikzpicture}
\begin{axis}[
height=12cm,
width=12cm,
xmin=-500,
xmax=500,
ymin=-500,
ymax=500,
]
\pgfplotstableread[col sep=comma]{plots/random_walk_perlin_state.csv}{\mytable};
\pgfplotstablegetrowsof{\mytable};
\pgfmathsetmacro{\rows}{\pgfplotsretval};
\pgfmathsetmacro{\xnlast}{0}
\pgfmathsetmacro{\ynlast}{0}
\pgfmathsetmacro{\xn}{0}
\pgfmathsetmacro{\yn}{0}
\pgfmathsetmacro{\len}{100}
\pgfplotsforeachungrouped \i in {0,1,...,\rows-1}
{
\pgfplotstablegetelem{\i}{Pos.x}\of{\mytable}
\pgfmathsetmacro{\xn}{\pgfplotsretval}
\pgfplotstablegetelem{\i}{Pos.y}\of{\mytable}
\pgfmathsetmacro{\yn}{\pgfplotsretval}
\pgfmathparse{ abs(\xnlast-\xn) < \len ? (abs(\ynlast-\yn) < \len ? 1 : 0) : 0}
\ifthenelse{\pgfmathresult > 0}
{
\edef\temp
{
\noexpand
\draw (\xnlast,\ynlast) -- (\xn,\yn);
}
\temp
};
\pgfmathsetmacro{\xnlast}{\xn}
\pgfmathsetmacro{\ynlast}{\yn}
};
\end{axis}
\end{tikzpicture}