# DRAGON CURVE (aka JURASSIC PARK FRACTAL)

The Dragon Curve is a fractal that was made famous in **Jurassic Park**, a novel by Michael Crichton.

This file calculates and plots the Dragon Curve. The user is encouraged to make their own variations of the fractal by experimenting with the following options:

- Initial starting shape
- Angle of rotation
- Number of fractal iterations

NOTE: In order to prevent users from exceeding the memory capacities of their machines, there is a `MAX_LENGTH` variable that will limit the number of fractal iterations calculated. On my machine, setting this value greater than `5e6` becomes very taxing for the `plot` function, but the user is free to change it if they have more memory resources available.

DISCLAIMER: This script can be a bit addicting! So enjoy being creative, but please be careful to keep one eye on the clock! :c)

AUTHOR: Joseph Kirk (c) 5/2006 EMAIL: jdkirk630 at gmail dot com

## Contents

## DEFINE THE INITIAL SHAPE

The traditional Dragon Curve uses a straight line as the initial shape, but any starting shape will work! Below is a list of some of my favorites:

`x=[0 1]; y=[0 0]; %LINE``x=linspace(0,2*pi,50); y=-1.5*sin(x); %S-CURVE``x=[0 1/3 0 1/3 0]; y=[0 1/4 1/2 3/4 1]; %W-CURVE``t=linspace(0,2*pi/3,20); x=sin(t); y=cos(t); %ARC`

% The x and y vectors must have at least two points each (or the result % will just be a single point) and they must have the same length x=[1 0]; y=[0 0]; %LINE

## SPECIFY THE ROTATING ANGLE (DEGREES)

The traditional Dragon Curve uses a rotating angle of 90 degrees, but any angle can be specified here. The most interesting fractals seem to be generated using angles between 80 and 120

```
angle=90; %degrees
```

## SPECIFY THE NUMBER OF DESIRED FRACTAL ITERATIONS

Good choices for this number are generally between 5 and 20, depending on the length of the starting shape and the desired resolution.

n=13;

## LIMIT THE SIZE OF THE FRACTAL

This is to prevent users from using too much memory.

MAX_LENGTH=5e6;

## GENERATE THE FRACTAL

% Verify that we have valid (x,y) pairs if length(x)~=length(y) disp('ERROR: x and y vectors must have the same length'); return end % Limit the size of the fractal m=length(x); if ((m-1)*2^(n-1)+1) > MAX_LENGTH n=ceil(log2((MAX_LENGTH-1)/(m-1))); disp(['WARNING: maximum iterations exceeded ... setting n = ' num2str(n)]); end % Generate the fractal for k=1:n-1 xr = fliplr(x); yr = fliplr(y); a = x(length(x)); b = y(length(y)); [theta, rho]=cart2pol(xr - a,yr - b); [rx0, ry0] = pol2cart(theta + angle*pi/180, rho); rx = rx0 + a; ry = ry0 + b; x=[x rx(2:length(rx))]; y=[y ry(2:length(rx))]; end

## PLOT THE X,Y COORDINATES

figure;plot(x,y,'k'); axis equal axis off title(['Dragon Curve (n = ' num2str(n) ', angle = ' num2str(angle) ')']); set(gcf,'color','white');