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.

Mandelbrot set

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.