Example: Fractals with Perl
Enough general talk! Let us test-drive both tools using a simple piece of fractal-drawing code. This problem is tailor-made for C, because generating a fractal image involves performing a series of computations on every pixel, which calls for compact data structures and fast number-crunching. This exercise creates the familiar Mandelbrot set image shown in Figure 18.3.
Figure 18-3. Mandelbrot set
Our Mandelbrot code is implemented in mandel.c
and mandel.h
. To avoid a non-portable GUI
solution, we use a public domain library, gd,
written by Tom Boutell [Section 18.7], which allows
you to treat a GIF file as a canvas and render points, lines, and
circles on it. This GIF file can then be viewed by using any web
browser.
mandel.c
implements one function called
draw_mandel
, with the signature shown in Example 18.1.
Example 18-1. mandel.h
extern int draw_mandel (char *filename, int width, int height, double origin_real, double origin_imag, double range, double depth);
The meaning of the parameters will be explained in the Section 18.6, later in this chapter. First, we’ll first concentrate on making it callable from Perl.
Fractals Using SWIG
We start by writing a SWIG interface file,
Fractal.i
, as in Example 18.2.
Example 18-2. Fractal.i—SWIG Interface File
%module Fractal %{ #include "mandel.h" %} %include mandel.h
The %module
statement gives a unique namespace to ...
Get Advanced Perl Programming now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.