我希望使用 PSTricks 在半径为 2 的圆盘中绘制一个随机点,遵循极坐标的均匀分布(使其在远处密度较小)。我尝试了以下三种方法,但 PSTricks 都不理解其中任何一种:
\SpecialCoor
\psdot( Rand(0,2) ; Rand(0,360) )
\psdot( \pscalculate{Rand*2} ; \pscalculate{Rand*360} )
\psdot( ! Rand 2 mul ; ! Rand 360 mul )
答案1
非常感谢,MOP!!您的解决方案有效,并且作为赠品,它包含了我正在寻找的小答案:命令
PtoC
它将极坐标耦合转换为笛卡尔耦合。如果你只向我透露了那四个秘密字母,我就可以自己完成这一切了 ;-)
现在我的小情节程序来了:
\begin{document}
\psset{unit=2cm}
\begin{pspicture}(-2,-2)(2,2)\SpecialCoor
\psframe[framearc=0,linecolor=black,fillstyle=solid,fillcolor=white](-2,-2)(2,2)
\pscircle[fillstyle=solid,fillcolor=lightgray,linewidth=1.1pt](0,0){2}
\psLoop{2500}{\psdot[dotscale=.25](! 2 Rand mul 360 Rand mul PtoC)}
\end{pspicture}
\end{document}
答案2
\documentclass[pstricks,border=5mm]{standalone}
\usepackage{pstricks-add}
\begin{document}
\psset{unit=4cm}
\begin{pspicture}(1,1)
\psRandom[dotsize=1pt,fillstyle=solid](1,1){\pscircle (0.5,0.5){0.5}}
\end{pspicture}
\begin{pspicture}(1,1)
\psRandom[randInit=42,dotsize=2pt,randomPoints=5000,color,
fillstyle=solid](1,1){\pscircle(0.5,0.5){0.5}}
\end{pspicture}
\end{document}
答案3
请考虑以下模板。其后给出了解释。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node,pst-plot}
\pstVerb
{
realtime srand
/RMax 5 def
/AMax 360 def
}
\begin{document}
\psLoop{10}{%
\begin{pspicture}(-5,-5)(5,5)
\curvepnodes[plotpoints=100]{0}{360}{RMax Rand mul AMax Rand mul PtoC}{A}
\pscircle{!RMax}
%\foreach \i in {0,1,...,99}{\psline[linecolor=lightgray](0,0)(A\i)}
\foreach \i in {0,1,...,99}{\pscircle*[linecolor=red](A\i){2pt}}
\end{pspicture}}
\end{document}
\pstVerb{...}
:仅在 PostScript 上下文中有效的标识符。realtime srand
:为 PSTricks 的伪随机数生成器播种。RMax
:最大半径AMax
:最大角度\psLoop{... integer number ...}{... PSTricks objects ...}
:循环构造\curvepnodes{... start ...}{... stop ...}{... coordinate expression in RPN ...}{... Node ...}
:定义曲线上的节点Rand
:产生0到1之间的随机浮点数。RMax Rand mul
:等于 0 到 之间的随机浮点数RMax
。AMax Rand mul
:等于 0 到 之间的随机浮点数AMax
。r t PtoC
:将极坐标转换为笛卡尔坐标!
:默认情况下不接收 RPN 的参数的 RPN 前缀。
如有任何问题,请发表评论!
额外的
如果您需要了解其PtoC
工作原理,请参阅以下内容。新动词MOP
将极坐标转换为笛卡尔坐标PtoC
。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node,pst-plot}
\pstVerb
{
/MOP {2 copy cos mul 3 1 roll sin mul} bind def
}
\begin{document}
\begin{pspicture}[showgrid=true](-5,-5)(5,5)
\psdots(!5 0 MOP)(!5 90 MOP)
\end{pspicture}
\end{document}
请注意,如果您自己的 PostScript 动词与现有动词冲突,则不会发出警告。根据经验,始终使用至少 3 个大写字母。