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.hThe %module statement gives a unique namespace to ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access