我试图在极坐标系中绘制随机点,并用线向下延伸至一个圆。这绝对简单,但结果并不如预期。Ti 提供的随机函数之间似乎存在干扰钾Z 和极坐标系统。
在 XeLaTeX 下,以下 MWE:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (1);
\foreach \myangle in {0, 20, ..., 340} {
\draw (\myangle:{random(0.5, 2)}) -- (\myangle:1);
};
\end{tikzpicture}
\quad
\begin{tikzpicture}
\draw (0,0) circle (1);
\foreach \myangle in {0, 20, ..., 340} {
\draw (\myangle:{2*rnd + 0.5}) -- (\myangle:1);
};
\end{tikzpicture}
\end{document}
生成:
答案1
我承认这有点令人困惑。这里有两个问题:
- 整数与非整数;
- 扩张。
至于第一个问题,random
当与两个参数一起使用时,期望这些参数是整数。然后它返回一个整数。如果不使用参数,它将返回和之间的实数0
。1
这在 pgfmanual 的第 1008-1009 页中有详细描述。一旦您向其输入非整数,它就不知道该做什么,只会返回非整数,即0.5
在本例中。此问题与无关xelatex
,但pdflatex
会产生相同的输出。我相信您正在寻找{1.5*random() + 0.5}
(或{1.5*rnd + 0.5}
)。
然后还有扩展问题。我相信我在某个地方找到过这个问题的答案,但不记得在哪里了。基本上,你必须强制 Ti钾Z 来固定随机数而不是让它随机。
以下代码解决了这些问题。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (1);
\foreach \myangle in {0, 20, ..., 340} {
\pgfmathsetmacro{\myrnd}{1.5*random() + 0.5}
\edef\temp{\noexpand\draw (\myangle:\myrnd) -- (\myangle:1);}
\temp
};
\end{tikzpicture}
\end{document}