如何在数学等式中对每个值进行节点排序?

如何在数学等式中对每个值进行节点排序?

我正在尝试绘制的根$(-1)^{n}$。代码运行正常

\documentclass[9pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}


\begin{document}


\def \n {7}

\begin{center}
\begin{tikzpicture}[scale=1.2,font=\tiny]
\begin{axis}[
    axis x line=middle,
    axis y line=middle,
    domain=-8:8,
    restrict y to domain=-8:8,
    x=3cm,
    y=3cm,
    xmin=-1.5,
    ymin=-1.5,
    xmax=1.5,
    ymax=1.5,
    grid=both,
    xtick={-3,-2.75,...,3},
    ytick={-3,-2.75,...,3},
]
\addplot[smooth,blue,domain=0:2*pi,variable=\t]
    ({cos(t*180/pi)},{sin(t*180/pi)});
\foreach \k in {1,...,\n}{
    \addplot[smooth,red,domain=0:1,variable=\t] (
        {\t*cos(\k*360/\n)+(1-\t)*cos((\k+1)*360/\n)},
        {\t*sin(\k*360/\n)+(1-\t)*sin((\k+1)*360/\n)}
    );
    \addplot[mark=none] 
        ({1.1*cos(\k*360/\n)},{1.1*sin(\k*360/\n)})
        node {\Large $w^{\k}$};
}
\end{axis}
\end{tikzpicture}
\end{center}

\end{document}

但它无法识别这一部分

\addplot[mark=none] ({1.1*cos(\k*360/\n)},{1.1*sin(\k*360/\n)}) node {\Large $w^{\k}$};}

答案1

这是一个非常常见的隐性问题,即绘图的累积和不合时宜的扩展。pgfplots 首先读取并累积所有绘图命令,然后进行一些分析后开始绘图。由于简单的 foreach 循环会确定其内容的范围,因此当 pgfplots 开始解压绘图命令时,它不会记住这\k是循环变量,而是将其视为 TeX\k字符。

pgfplots 为此提供了两个额外的 foreach 循环,您可以查看手册以了解不同的目的。

在这里,如果您按如下方式修改循环,pgfplots 首先会在遇到时扩展变量并存储实际值(#1在此上下文中表示循环变量)

\pgfplotsinvokeforeach{1,...,\n}{
    \addplot[smooth,red,domain=0:1,variable=\t] (
        {\t*cos(#1*360/\n)+(1-\t)*cos((#1+1)*360/\n)},
        {\t*sin(#1*360/\n)+(1-\t)*sin((#1+1)*360/\n)}
    );
    \addplot[mark=none] 
        ({1.1*cos(#1*360/\n)},{1.1*sin(#1*360/\n)})
        node {\Large $w^{#1}$};
}

这样,事情的解释就正确了。

在此处输入图片描述

相关内容