O'Reilly logo

Advanced Perl Programming by Sriram Srinivasan

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required