使用 \foreach 填充(连续)路径,并对每个点进行复杂的计算

使用 \foreach 填充(连续)路径,并对每个点进行复杂的计算

我试图通过循环计算每个点的位置\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 的结果以及我想要实现的目标:

MWE 输出 目标

如果有完全不同的方法可以做到这一点,那也没问题。

谢谢。

答案1

一种可能更简单的方法是使用plot. samples atTiZ 为您解析坐标。

\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}

输出如下:

在此处输入图片描述

谢谢保罗!

相关内容