PostScriptでモンテカルロ法を試す

最終更新日

今更何やっているんだよって思うでしょ? まあ、そのとおりなんですけどね。
わたしもそれなりに業界に居付いて長いので色々なデータを死蔵しております。先日そういった過去の遺物の中に変なEPSファイルを見つけました。開いてみると、これはアレです、ページ記述の方ではなくてプログラムになっています。もちろんEPSなのでポストスクリプトで書かれていますから配置したりプリントも可能なんですけど、内容的にはプログラムによってまるまる記述されます。面白いので紹介しておきますね。

%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 0 0 220 260
/trials 5000 def /hits 0 def
/cross {
  moveto -2 -2 rmoveto 4 4 rlineto -4 0 rmoveto
  4 -4 rlineto stroke
} def
rrand realtime revision xor xor 16#7fffffff and srand
110 110 translate -100 -100 200 200 rectstroke
1 0 0 setrgbcolor 0 0 100 0 360 arc stroke
1 1 trials {
  pop rand 20001 mod .01 mul 100 sub
  rand 20001 mod .01 mul 100 sub
  dup dup mul 2 index dup mul add 10000 ge
  { 0 0 0 setrgbcolor }
  { 1 0 0 setrgbcolor /hits hits 1 add def } ifelse
  cross
} for
0 setgray /Symbol 25 selectfont -50 120 moveto (p \273 ) show
hits trials div 4 mul 8 string cvs show

いきなりポストスクリプトコードです。このコードをテキストエディターにコピペして「なんでもいいので.eps」という適当な名前のEPSファイルとして保存してください。実際に何をしているかと言うと、正方形の中に円を描画して、その上に5000回ランダムに点を打ちます。これがどちらの領域にに落ちたかを数えて結果から円周率を求めるという処理になっています。どちらの領域に落ちるかというのは純粋に確率でギャンブル的な要素があることから「モンテカルロ」が名前に付けられています。
3行目の/trialsに続く5000がループ回数になっています。100万ぐらいまで上げてもIllustratorは処理できますので色々と変更して試していただけたらと思います。

ポストスクリプトはPDFとは違いプログラム言語だという事を体感できる一例です。

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする