随机极坐标

随机极坐标

我想要在一个大圆圈里面画一些随机的小圆圈。

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 radiusy 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}

输出:

  • 半径和角度都是随机指定的

    在此处输入图片描述

  • 随机半径和固定角度

    在此处输入图片描述

  • 固定半径和随机角度

    在此处输入图片描述

相关内容