使用 tikz 沿螺旋线绘制和书写文字

使用 tikz 沿螺旋线绘制和书写文字

我正在尝试制作一个带有文字的螺旋线,就像

在此处输入图片描述

我努力了

\documentclass[tikz]{standalone}

\begin{document}

\begin{tikzpicture}
\draw [thick,->] (10, 0) -- (-10, 0) node [left] {Review};
\draw [thick,->] (0, -10) -- (0, 10) node [above] {Cumulative costs};
\draw [domain=0:-33, variable=\t, smooth, samples=75, ->] plot ({\t r}: {0.008*\t*\t});
\end{tikzpicture}

\end{document}

它会产生带注释的轴和螺旋,但我不知道如何沿着螺旋写文字。

答案1

我能看到两种可能性

在第一个解决方案中,我创建另一个图并使用库将节点放置在曲线上decorations.markings。该库提供了两种指定位置的方法:按长度测量或按总长度的系数测量。

\documentclass[tikz,border=9]{standalone}
    \usetikzlibrary{arrows.meta,decorations.markings}
\begin{document}

\tikzset{nodes={font=\ttfamily,fill=white}}

\begin{tikzpicture}
    \draw[thick,arrows={->[length=10]}](8,0)--(-8,0)node [left] {Review};
    \draw[thick,arrows={->[length=10]}](0,-8)--(0,8)node [above] {Cumulative costs};
    \draw[domain=0:15,variable=\t,samples=440,smooth,arrows={->[length=10]}]
        plot({(-\t+1.5708) r}:{\t/3+2*\t/(0.1+\t)});
    \path[domain=0:15,variable=\t,samples=440,decorate,
            decoration={
                markings,
                mark=at position 2cm with \node{2cm};,
                mark=at position .3 with \node{pos=.3};,
            }
        ]
        plot({(-\t-1.5708) r}:{\t/3+2});
\end{tikzpicture}

另一种方法是创建一种新样式,通过我们定义的参数化将节点移动到我们想要的位置。

\begin{tikzpicture}[
        declare function={
            f(\t)=90-\t*90;
            g(\t)=\t/2+2*\t/(0.1+\t);
            f2(\t)=-90-\t*90;
            g2(\t)=\t/2+2;
        },
        pos par/.style={
            shift={({f2(#1)}:{g2(#1)})}
        }
    ]
    \draw[thick,arrows={->[length=10]}](8,0)--(-8,0)node[left]{Review};
    \draw[thick,arrows={->[length=10]}](0,-8)--(0,8)node[above]{Cumulative costs};
    \draw[domain=0:10,variable=\t,smooth,samples=440,arrows={->[length=10]}]
         plot({f(\t)}:{g(\t)});
    \path node[pos par=0]{pos par=0}
          node[pos par=1]{pos par=1}
          node[pos par=2]{pos par=2}
          node[pos par=3]{pos par=3}
          node[pos par=4]{pos par=4}
          node[pos par=5]{pos par=5}
          node[pos par=6]{pos par=6}
          node[pos par=7]{pos par=7}
          node[pos par=8]{pos par=8};
\end{tikzpicture}

\end{document}

顺便说一句,\t/(1+\t)(以及它的线性变换)是一个“爬升”到 1 并停留在那里的函数。我添加这个函数是为了修饰阿基米德螺旋线,这样就有足够的空间放置第一个标签。

相关内容