# Pattern Generation for Computational Art

## Software

Below are the C programs that accompany the book, Pattern Generation for Computational Art. You can download each as you need it, or all of them bundled into a zip file. All the automaton files used in the book can also be downloaded in a zip file.

This software is free and distributed under the terms of the GNU General Public License. It is written in ANSI C and should compile with any C compiler. If you have questions or comments contact: Stefan (stefan at exstrom dot com) or Richard (richard at exstrom dot com).

• autogen.c
Generates all words of a given length accepted by an automaton.
```Usage: autogen file.aut n s e1 e2 ...
file.aut  = automaton file
n = length of words
s = start state
ei = end state i
```
• b2d.c
Converts a binary number to decimal.
```Usage: d2b n
```
• cfcv.c
Calculates the convergent of a continued fraction.
```Usage: cfcv a0 a1 a2 ... an
ai = simple continued fraction term
```
• cfgen.c
Generates the words of a context free grammar.
```Usage: cfgen file.cfg n s
file.cfg  = grammar file
n = number of derivation steps
s = start variable
```
• cfrac.c
Calculates the continued fraction of a real number.
```Usage: cfrac x n
x = number
n = number of terms
```
• cfrat.c
Calculates the continued fraction of the rational number p/q.
```Usage: cfrat p q
```
• cfsqrt.c
Calculates the continued fraction of the square root of an integer.
```Usage: cfsqrt n
n = integer
```
• cfsurd.c
Calculates the continued fraction of a quadratic surd: (A+sqrt(n))/B where n, A and B are integers and n>0.
```Usage: cfsurd n A B
n, A, B = integers, with n>0
```
• chseq.c
Calculates a Christoffel sequence.
```Usage: chseq p q n
p = numerator
q = denominator
n = number of terms to generate,
default=p+q
```
• d2b.c
Converts a decimal number to binary.
```Usage: d2b n
```
• katrans.c
Translates a sequence of the numbers 0 to k.
```Usage: katrans file.kat
file.kat  = k-automaton file
```
• lsysgen.c
Generates an L-system string given an axiom and set of production rules.
```Usage: lsysgen file.ldf n
file.ldf = name of file with axiom
and production rules.
n = number of times to iterate.
```
• pfold.c
Generates paper folding sequences.
```Usage: pfold n m f
n = number of terms,
1,3,7,15,31,63,127,...
m = number of bits
f = function number 0 -> 2^m-1
```
• rndseq.c
Generates random binary sequences.
```Usage: rndseq n
n = number of digits to generate
```
Generates the Rudin-Shapiro sequence.
```Usage: rsseq n
n = number of terms
```
• tmseq.c
Generates the Thue-Morse sequence.
```Usage: tmseq n
n = number of terms
```
• turtledraw.c
Creates an svg file from turtle drawing instructions. Input is read from stdin. Requires the Cairo graphics library.
```Usage: turtledraw angle dangle file.svg
angle = start angle
dangle = increment angle
file.svg = output svg file.
Example: chseq 355 113 1872 | katrans t7.kat | turtledraw 0.0 90.0 file.svg
```

Send comments to: Richard Hollos (richard[AT]exstrom DOT com)
Copyright 2019 by Exstrom Laboratories LLC