下图显示了使用以下方法随机散布的“点”\ps随机来自 pstricks-添加包。我需要能够为多个图形(以及及时的 gif 动画)重新生成相同的图案。此外,我还想找到一个可以生成“更好”的“点”集的种子。
我在用随机数因为我是新手普斯特里克除了能够选择种子之外,它还具有我所需要的功能。(我确实看过pstricks-添加手册(从 2004 年开始),但并未提及它作为一种可能的选择。)
有人对我如何修复此问题有什么建议吗?我想象种子设置在一个变量中,我应该能够覆盖它...
我愿意接受不涉及 psRandom 的替代方案。但是,我正在尝试摆脱 tikz,因此我正在寻找使用 pstricks 的解决方案。
非常感谢您的帮助。下面显示的 tex 文件将重现该图。
% summary: Figure containing random dots...
%
% execute the following commands sequentially in order to typeset.
% $ latex texput.tex
% $ dvips texput.dvi
% $ ps2pdf texput.ps
\documentclass[pstricks]{standalone}
\usepackage{pstricks-add}
\begin{document}
%
\begin{pspicture}*(-5.5,-5.5)(7.5,5.5)
\def\myFrame{5cm}
\def\myWidth{8pt}
\def\myGreen{green!80!black}
\def\myMagenta{magenta}
\def\myCyan{cyan!90!black}
\def\myBlack{black!70!gray}
% Magenta dots
\psRandom[dotstyle=o, fillstyle=solid, fillcolor=\myMagenta,%
linecolor=\myGreen, randomPoints=20, dotsize=\myWidth]%
(-\myFrame,-\myFrame)%
( \myFrame, \myFrame)%
{\psframe[linecolor=black](-\myFrame,-\myFrame)(\myFrame,\myFrame)}
% Cyan dots
\psRandom[dotstyle=o,fillstyle=solid,fillcolor=\myCyan,linecolor=\myGreen,%
randomPoints=4,dotsize=\myWidth]%
(-\myFrame,-\myFrame)%
( \myFrame, \myFrame)%
{\psframe[linecolor=black](-\myFrame,-\myFrame)(\myFrame,\myFrame)}
% Black dots
\psRandom[dotstyle=o,fillstyle=solid,fillcolor=\myBlack,linecolor=\myBlack,%
randomPoints=2,dotsize=\myWidth]%
( 5,-5)%
( 7, 5)%
{\psframe[linecolor=black,linestyle=dashed]( 5, -5)( 7, 5)}
\end{pspicture}
%
\end{document}
答案1
该文件pstricks-add.tex
通过命令初始化随机数生成器
rrand srand
在宏中\psRandom@iii
。
为了使结果可重现,我们需要将其更改rrand
为任何常数,例如 42。
在文档的序言中放入(后 \usepackage{pstricks-add}
)
\makeatletter
\def\psRandom@iii(#1)(#2)#3{%
\def\pst@tempA{#3}%
\ifx\pst@tempA\pst@empty\psclip{\psframe(#2)}\else\psclip{#3}\fi
\pst@getcoor{#1}\pst@tempA
\pst@getcoor{#2}\pst@tempB
\begin@SpecialObj
\addto@pscode{
\pst@tempA\space /yMin exch def
/xMin exch def
\pst@tempB\space /yMax exch def
/xMax exch def
/dy yMax yMin sub def
/dx xMax xMin sub def
42 srand % initializes the random generator
/getRandReal { rand 2147483647 div } def
\psk@dotsize % defines /DS ... def
\@nameuse{psds@\psk@dotstyle}
\psk@randomPoints {
\ifPst@color getRandReal getRandReal getRandReal setrgbcolor \fi
getRandReal dx mul xMin add
getRandReal dy mul yMin add
Dot
\ifx\psk@fillstyle\psfs@solid fill \fi stroke
} repeat
}%
\end@SpecialObj
\endpsclip
\ignorespaces
}
\makeatother