毕达哥拉斯螺旋:\foreach 和 \pgfmathresult 有问题?

毕达哥拉斯螺旋:\foreach 和 \pgfmathresult 有问题?

下面的代码显示了问题。有两个tikzpictures。第一个是扩展的代码,可以正常工作。第二个是相同的代码,但放在循环中\foreach。这不起作用。

我假设索引的评估或循环内\n的使用发生了一些事情。\pgfmathresult\foreach

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\coordinate (O) at (0,0);
\coordinate (A0) at (1,0);
\pgfmathparse{add(90,0)}; 
%
\path (A0) ++ (\pgfmathresult:1) coordinate (A1);
\draw (O)--(A0)--(A1)--(O);
\coordinate (A0) at (A1);
\pgfmathparse{add(\pgfmathresult,atan(1/sqrt(1)))};
%
\path (A0) ++ (\pgfmathresult:1) coordinate (A1);
\draw (O)--(A0)--(A1)--(O);
\coordinate (A0) at (A1);
\pgfmathparse{add(\pgfmathresult,atan(1/sqrt(2)))};
%
\path (A0) ++ (\pgfmathresult:1) coordinate (A1);
\draw (O)--(A0)--(A1)--(O);
\coordinate (A0) at (A1);
\pgfmathparse{add(\pgfmathresult,atan(1/sqrt(3)))};
%
\end{tikzpicture}


\begin{tikzpicture}
\coordinate (O) at (0,0);
\coordinate (A0) at (1,0);
\pgfmathparse{add(90,0)}; 
%
\foreach \n in {1,2,3}{
\path (A0) ++ (\pgfmathresult:1) coordinate (A1);
\draw (O)--(A0)--(A1)--(O);
\coordinate (A0) at (A1);
\pgfmathparse{add(\pgfmathresult,atan(1/sqrt(\n)))}; 
}
%
\end{tikzpicture}

\end{document}

答案1

\pgfmathresult由于您在 块内进行推导,因此需要将 的值保存在全局变量中{...}

\begin{tikzpicture}
\coordinate (O) at (0,0);
\coordinate (A0) at (1,0);
\pgfmathparse{add(90,0)};
\edef\res{\pgfmathresult}
%
\foreach \n in {1,2,...,10}{
  \path (A0) ++ (\res:1) coordinate (A1);
  \draw (O)--(A0)--(A1)--(O);
  \coordinate (A0) at (A1);
  \pgfmathparse{add(\res,atan(1/sqrt(\n)))};
  \xdef\res{\pgfmathresult};
} 
\end{tikzpicture}

在此处输入图片描述

相关内容