我试图通过循环计算每个点的位置\foreach
(可能数百个点)来绘制曲线。由于计算相当复杂,我使用\pgfmathsetmacro
多次来存储中间结果。
这是我目前拥有的 MWE。它绘制了我想要的路径,但它不是连续的路径,所以我无法轻松填充它。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \t in {0.0,0.1,...,1}{
% complex calculation depending on \t here with lots of \pgfmathsetmacro s
% The values of the pos variables obviously depend on the previous calculations in my actual use case
\pgfmathsetmacro \posX {\t}
\pgfmathsetmacro \posY {\t * \t}
\pgfmathsetmacro \posXNext {\t + 0.1}
\pgfmathsetmacro \posYNext {(\t + 0.1) * (\t + 0.1)}
\draw (\posX, \posY) -- (\posXNext, \posYNext);
}
\end{tikzpicture}
\end{document}
我无法使用这里建议的解决方案:
使用 foreach 在多个节点之间绘制路径,因为调用\pgfmathsetmacro
之前的所有 s \draw
(或者至少我无法让它工作)。
以下是 MWE 的结果以及我想要实现的目标:
如果有完全不同的方法可以做到这一点,那也没问题。
谢谢。
答案1
一种可能更简单的方法是使用plot
. samples at
Ti钾Z 为您解析坐标。
\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[fill=red!50!white] (0, 0) --
plot[samples at={0.0,0.1,...,1},variable=\t]
({\t},{\t * \t});
\end{tikzpicture}
\end{document}
钛钾Z 自动解析其坐标,无需使用\pgfmathsetmacro
。现在假设您有一个更复杂的函数。那么您可以将其定义存储在函数声明中。
\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}[declare function={f(\t)=\t*\t-0.1*pow(\t,3)-0.1*\t*exp(-\t*\t);}]
\draw[fill=red!50!white] (0, 0) --
plot[samples at={0.0,0.1,...,1},variable=\t]
({\t},{f(\t)});
\end{tikzpicture}
\end{document}
您可能想或不想添加smooth
到您的函数中。还请注意,在 pgfmanual 版本 3.1.1 的第 339 页上可以找到一个选项/tikz/parametric
,它调用 gnuplot 来绘制参数函数。
答案2
感谢 Paul 的评论和我在原始问题中提到的帖子(使用 foreach 在多个节点之间绘制路径),我找到了一个适合我需要的答案(链接帖子中提到的错误现在可能已经修复了,因为我不需要那里提到的定义):
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[fill=red!50!white] (0, 0)
\foreach \t in {0.0,0.1,...,1}{
\pgfextra
% complex calculation depending on \t here with lots of \pgfmathsetmacro s
\pgfmathsetmacro \x {\t}
\pgfmathsetmacro \y {\t * \t}
\endpgfextra
-- (\x, \y)
};
\end{tikzpicture}
\end{document}
输出如下:
谢谢保罗!