回答这个问题:在 tikz 中绘制插图,我想画一个不相交具有随机修改半径的逐步(超)椭圆。我最终使用了以下基本方法:
\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[cyan, very thick] (2.5,0) \foreach \ang in {5,10,...,355}{ -- ({(2+rnd)*cos(\ang)}, {0.5*(2+rnd)*sin(\ang)})} -- cycle;
\end{tikzpicture}
\end{document}
问题在于椭圆的半径被两个不同的随机数修改,而形状确实如所见自相交。我的目标是让 x 半径随机,(2+rnd)
y 半径为其比例0.5*(2+rnd)
(但使用相同的随机数)。
我在想,我可以使用\pgfmathparse
,但在里面不允许这样做\draw
。
我该如何解决这个问题?
编辑:我刚刚从功能上解决了我的问题。我不知道是否可以用更聪明的方式来解决。
答案1
就在我发布问题的时候,我想起来了\pgfextra
,解决方案很简单:
\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[cyan, very thick] (2.5,0) \foreach \ang in {5,10,...,355}{ \pgfextra{\pgfmathsetmacro{\r}{(2+rnd)}} -- ({(\r*cos(\ang)}, {0.5*\r*sin(\ang)})} -- cycle;
\end{tikzpicture}
\end{document}
-但我还是不知道该rnd
号码是否可以直接重复使用!?
编辑:现在没有额外的宏。
\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[cyan, very thick] (2.5,0) \foreach \ang in {5,10,...,355}{ \pgfextra{\pgfmathrnd} -- ({(2+\pgfmathresult)*cos(\ang)}, {0.5*(2+\pgfmathresult)*sin(\ang)})} -- cycle;
\end{tikzpicture}
\end{document}