我正在尝试绘制的根$(-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}$};
}
这样,事情的解释就正确了。