正如标题所述,我正在尝试使用 TikZ 绘制向日葵图案。我的实验基于以下信息:本教程由 Jim Bumgardner 编写,主要来自示例8和10。
他的演示使用了 javascript,我已经将其改编为 python 来生成 svg,但这次我需要以 cmyk 格式生成可打印的文档,因此我尝试使用 TikZ。
我使用下面显示的代码没有问题,但我的问题是我无法绘制包含更多圆圈的图案。当我尝试使用更大的“nbrcircles”值对其进行编译时,我收到错误“尺寸太大”。在尽可能多地阅读后,我了解到此错误与 TikZ 系统的计算限制有关。
我对 TikZ 世界(甚至对 Tex 世界)还很陌生,我正在寻找一种方法来绘制更大的图案,如上面链接的页面所示。
任何帮助将不胜感激。
这是我目前拥有的工作代码。只需将 nbrcircles 的值替换为更大的数字即可产生错误:
\documentclass[10pt]{minimal}
\usepackage{tikz}
\begin{document}
\pagestyle{empty}
\def \nbrcircles {28}
\def \outerradius {15mm}
\def \dotradius {1.5mm}
\begin{tikzpicture}
\pgfmathsetmacro {\goldenAngle} {180 * (1+sqrt(5))}
\foreach \b in {1,...,\nbrcircles}{
\pgfmathsetmacro{\angle} {\goldenAngle * \b}
\pgfmathsetmacro{\sradius}{\b / \nbrcircles * \outerradius / 10}
\draw[] (\angle:\sradius) circle [radius=\dotradius] ;
}
\end{tikzpicture}
\end{document}
这是我使用该代码得到的结果。将其与示例 #8 进行比较吉姆的页面,你会发现我漏掉了几个点:-) :
理想情况下,我希望能够制作一个包含 300 到 600 颗种子的图案,并且能够随着螺旋的发展而增加圆的大小(就像 Jim 的示例 10 一样)。
答案1
\angle
代码中的问题来自于以下行的计算:
\pgfmathsetmacro{\angle} {\goldenAngle * \b}
当\b
大于 28 时,该乘积的结果将大于 16384,这是允许的最大值。您应该重构代码以避免计算此类值。
在此代码中执行此操作的一种方法是计算相同的角度模数360. 尝试以下操作:
\begin{tikzpicture}
\pgfmathsetmacro {\goldenRatio} {(1+sqrt(5))}
\foreach \b in {1,...,\nbrcircles}{
\pgfmathsetmacro{\angle}{mod(\goldenRatio * \b,2)*180}
\pgfmathsetmacro{\sradius}{\b / \nbrcircles * \outerradius / 10}
\draw[] (\angle:\sradius) circle [radius=\dotradius] ;
}
\end{tikzpicture}
您可以看到,我们现在\b
仅乘以1+sqrt(5)
,然后在乘以 180 之前使用模数运算。这将产生与之前代码相同的结果,但允许 更大的值\b
。例如,查看\nbrcircles
设置为 1000 的渲染: