![旋转角度非常大(Tikz)](https://linux22.com/image/366811/%E6%97%8B%E8%BD%AC%E8%A7%92%E5%BA%A6%E9%9D%9E%E5%B8%B8%E5%A4%A7%EF%BC%88Tikz%EF%BC%89.png)
我目前正在尝试使用 Tikz 绘制斐波那契花。对于较小的 \i 值,一切都运行良好,但如果我将其设置为高于 45,则角度对于旋转来说太大(我考虑的最大值是 6000 左右 :) )。
\documentclass{minimal}
\usepackage{tikz}
\usepackage{calc}
\begin{document}
\begin{center}
\begin{tikzpicture}[scale=0.05]
\foreach \i in {45,...,1}{
\draw[rotate={\i*360*(1-1/(0.5*(1+sqrt(5))))},fill=white] ({(sqrt(\i))},0) ellipse ({(sqrt(\i))} and {0.3*(sqrt(\i))});
}
\end{tikzpicture}
\end{center}
\end{document}
到目前为止,我最好的解决方法是使用 intcalc 包中的 \intcalcMod,但我只能使用整数作为输入,因此错误变得太大。这是我目前能得到的最好的结果(正如您所看到的,螺旋在外部区域消失,我认为这是由于舍入误差造成的,如果我们使用精确的角度,就不会发生这种情况):
非常感激对这个有趣项目的任何帮助:)
解决了:
感谢 percusse,这是带有 10000 个桨的版本。我数了一下,顺时针螺旋有 144 个,逆时针螺旋有 89 个(所以应该是连续的斐波那契数)。数学真棒 :)
答案1
如果您可以接受迭代解决方案,那么以下方法可以代替直接乘法。值 283.10562 只是离线完成的,但这并不重要,因为它只是定义了一个初始角度。它也可以从 0 开始迭代,定义一个额外的旋转。
请注意,我在坐标和椭圆规范中使用了尺寸。这是避免缩放问题的更安全的方法。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro\myfact{(1-2/(1+sqrt(5)))*360}
\foreach \i[evaluate={\t=Mod(\lastt-\myfact,360);},
remember=\t as \lastt (initially 283.10562)] in {1200,...,1}{
\draw[rotate={\t},fill=white]
({(sqrt(\i))*1pt},0) ellipse ({(sqrt(\i))*1pt} and {(sqrt(\i))*0.3pt});
}
\end{tikzpicture}
\end{document}
这是 1200
和 5000