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.

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

Start Free Trial

No credit card required