![TikZ:pgfmath 操作没有给出预期的结果](https://linux22.com/image/352493/TikZ%EF%BC%9Apgfmath%20%E6%93%8D%E4%BD%9C%E6%B2%A1%E6%9C%89%E7%BB%99%E5%87%BA%E9%A2%84%E6%9C%9F%E7%9A%84%E7%BB%93%E6%9E%9C.png)
在这个 MWE 中,预期会得到 7 个在角度方向上等距分布且半径拉伸的圆。但是,我得到了这个奇怪的输出。
\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach[count=\i] \x in {0,1,...,6}{%
\pgfmathtruncatemacro\ml{1.2^(\i-1)}
\draw (1,1)++(\x*30:5*\ml) circle[radius=1];
}
\end{tikzpicture}
\end{document}
答案1
问题在于您使用的\pgfmathtruncatemacro
会丢弃小数点后的所有内容。1.2 的前四次幂介于 1 和 2 之间,因此将其截断为 1。接下来的三次幂介于 2 和 3 之间,因此将其截断为 2。要解决此问题,请将其替换\pgfmathtruncatemacro
为\pgfmathsetmacro
。
\documentclass[border=2pt]{standalone}
%\url{http://tex.stackexchange.com/q/362136/86}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach[count=\i] \x in {0,1,...,6}{%
\pgfmathsetmacro\ml{1.2^(\i-1)}
%\pgfmathtruncatemacro\ml{1.2^(\i-1)}
\draw (1,1) ++(\x*30:5*\ml) circle[radius=1];
}
\end{tikzpicture}
\end{document}
(我在图片中的圆圈中添加了线条,以更明确地显示半径。)