openbabelのperlラッパーに触発されたので、実用Perlプログラミングの初版を片手に。SWIGを使って、マンデルブロ集合を描いてみた。
思ってたよりも、楽だ。まず、本の18章の
mandel.cとmandel.hを用意する。本だとgifに出力してあったが、FC1のgd-2.0.15.1ではできなかったのでpngで出力するようになってる。
続いて、SWIGインターフェースのFractal.i
%module Fractal
%{
#include "mandel.h"
%}
%include mandel.h
を用意したら、swigコマンドを実行。本だとperl5を引数にとってたけど、ネット調べたらperlでいけそうだし、-shadowオプション付けてるのが多いので、よくわからんけど付けてみた(これは後でちゃんと調べる)。
$ swig -shadow -perl Fractal.i
あとはMakeFile.PL書いて、普通にmakeでOK
use ExtUtils::MakeMaker;
WriteMakefile(
'NAME' => 'Fractal',
'LIBS' => ['-L/home/kzfm/perltest/swigtest -lgd'],
'INC' => '-I/home/kzfm/perltest/swigtest',
'OBJECT' => 'mandel.o Fractal_wrap.o'
);
Perlで呼び出す
普通にモジュールを呼び出すだけですな。
use Fractal;
Fractal::draw_mandel('mandel.png', 300, 300,
-1.5, 1.0,
2.0, 20);
で、絵の出来上がり!
実用Perlプログラミングは初版、第二版ともにもっているけど、型グロブとかクロージャとかXS,SWIGなんかは初版の方が詳しく書いてあるので、僕は今でも重宝するヨ。というか最近わかってきたっぽくて読むのが楽しい。