我想要在一个大圆圈里面画一些随机的小圆圈。
我rnd
在两个坐标(极坐标)处都使用了:({30*rnd}:{2*rnd})
——这里我想要在 [0;30] 度范围内画出小圆圈。输出是随机的,但不限于 30 度。
然后我想要一个恒定的角度:({30}:{2*rnd})
。输出没有任何意义。两个坐标都是随机的。
最后,我想要到中心的恒定距离:({30*rnd}:{2})
。从外观上看一切正常:这是一个受 30 度限制的圆弧。
代码如下:
\documentclass{article}
\usepackage{tikz}
\usepackage{scalefnt}
\usetikzlibrary{arrows,calc, positioning}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{2mm}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle(3);
\draw[dashed] (0:0) -- (30:3);
\pgfmathsetseed{\pdfuniformdeviate 1000000};
\foreach \iter in {1,2,...,50} {
\draw[fill=red] ({30*rnd}:{2*rnd}) circle(0.01);
}
\end{tikzpicture}
\begin{tikzpicture}
\draw (0,0) circle(3);
\draw[dashed] (0:0) -- (30:3);
\pgfmathsetseed{\pdfuniformdeviate 1000000};
\foreach \iter in {1,2,...,50} {
\draw[fill=red] ({30}:{2*rnd}) circle(0.01);
}
\end{tikzpicture}
\begin{tikzpicture}
\draw (0,0) circle(3);
\draw[dashed] (0:0) -- (30:3);
\pgfmathsetseed{\pdfuniformdeviate 1000000};
\foreach \iter in {1,2,...,50} {
\draw[fill=red] ({30*rnd}:{2}) circle(0.01);
}
\end{tikzpicture}
\end{document}
有任何想法吗?
答案1
TikZ 中的极坐标可以使用圆形坐标系的单个半径来指定,也可以使用椭圆坐标系的 x 和 ay 半径来指定。在内部,圆形坐标系由带有 的椭圆坐标系表示。x radius = y radius
这对于静态值很有效,但如果将半径设置为,则会为和rnd
生成不同的随机数,从而导致您观察到的行为。x radius
y radius
\draw
您可以通过使用计算语句外的随机半径\pgfmathsetmacro\radius{1+rnd}
,然后\radius
在坐标规范中使用来解决此问题:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle(3);
\draw[dashed] (0:0) -- (30:3);
\pgfmathsetseed{1};
\foreach \iter in {1,2,...,50} {
\pgfmathsetmacro\radius{1+rnd}
\draw[fill=red] (rnd*30:\radius) circle(0.01);
}
\end{tikzpicture}
\begin{tikzpicture}
\draw (0,0) circle(3);
\draw[dashed] (0:0) -- (30:3);
\pgfmathsetseed{\pdfuniformdeviate 1000000};
\foreach \iter in {1,2,...,50} {
\pgfmathsetmacro\radius{2*rnd}
\draw[fill=red] ({30}:{\radius}) circle(0.01);
}
\end{tikzpicture}
\begin{tikzpicture}
\draw (0,0) circle(3);
\draw[dashed] (0:0) -- (30:3);
\pgfmathsetseed{\pdfuniformdeviate 1000000};
\foreach \iter in {1,2,...,50} {
\draw[fill=red] ({30*rnd}:{2}) circle(0.01);
}
\end{tikzpicture}
\end{document}
答案2
使用 PSTricks (无错误):
\documentclass[pstricks,border=12pt]{standalone}
\pstVerb{realtime srand}
\SpecialCoor
\begin{document}
% case 1: random radius [0,2] unit and angle [0,30] degrees
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){3}
\psLoop{50}{\pscircle(!rand 201 mod 100 div rand 301 mod 10 div PtoC){.01}}
\end{pspicture}
% case 2: random radius [0,2] unit and fixed angle 30 degrees
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){3}
\psLoop{50}{\pscircle(!rand 201 mod 100 div 30 PtoC){.01}}
\end{pspicture}
% case 3: fixed radius 2 unit and random angle [0,30] degrees
\begin{pspicture}(-3,-3)(3,3)
\pscircle(0,0){3}
\psLoop{50}{\pscircle(!2 rand 301 mod 10 div PtoC){.01}}
\end{pspicture}
\end{document}
输出:
半径和角度都是随机指定的
随机半径和固定角度
固定半径和随机角度