# An Experiment in Text as Numbers and the Library of Babel

The above image is ‘Harry Potter and the Philosopher's Stone’. Whilst browsing the internet I came across the website ‘Library of Babel’. This website contains all possible pages containing 3200 characters, adding up to around 10⁴⁶⁷⁷ books. It works by using a pseudo-random number generating algorithm to produce the books in without needing to store the actual book itself.

Inspired by this website, I had the idea, that instead of using a number generator, to just compress the text down and use that as the index. So I created a program that took text and converted it to a number by treating the text as though it was in a base 75 number system. (a being equal to 0, b being equal to 2 and etc) And then converting that number into base 65535 by using every symbol in unicode to represent a digit. So “Hello World” would become:

This created a similar effect as the website however instead of a pseudo-random number generator, it simply condensed the text down.

This then gave me the idea to convert the text into base 4294967295. And instead of representing each digit as a symbol to represent it as a 32 bit ARGB colour. (4294967295 being the number of colours possible) and then rendering this in processing, creating the above image.

Romeo and Juliet

Comment

# Parametric Equations

Parametric equations express the points on a curve as a function of a variable. The images above were created by plotting a parametric equations in Processing. The equation was:

The video below was created by drawing lines between opposite points on the curve the equation produces. The colour of the curve changes based on it's length.

### Source Code

```void setup() {
size(1080, 720);
frameRate(60);
colorMode(HSB, 360, 100, 100);
}

//parametric equation parameters
float a1 = 100;
float b1 = 1;
float c1 = 100;
float d1 = 50;

//increments corresponding parameter if true and decrements if false
boolean reversed = false;
boolean reversec = false;

//time modifier
float tMod = 0;

void draw() {
background(0);

strokeWeight(3);
//draw lines
for (float t = tMod; t <= 0.005 * 5 + tMod + 0.004; t+= 0.005) {
//first point
float x1 = (cos(a1*t)-cos(b1*t)) *100 + width/2;
float y1 = (sin(c1*(t ))-sin(d1*(t ))) * 100 + height/2;
//second point
float x2 = (cos(a1*(t + HALF_PI))-cos(b1*(t + HALF_PI))) *100 + width/2;
float y2 = (sin(c1*(t + HALF_PI))-sin(d1*(t + HALF_PI))) * 100 + height/2;
//length of line
float lengthL = sqrt(pow(abs(x1-x2), 2) + pow(abs(y1-y2), 2));
//set colour based on length of line
stroke(map(lengthL - 120, 0, 160, 0, 360), 100, 100);
//draw line
line(x1, y1, x2, y2);
}
//increase time modifier
tMod += 0.0005;

//change some parameters to create more interesting movement
if (reversec) {
c1-=0.001;
} else {
c1+=0.001;
}
if (c1 > 50) {
reversec = true;
} else if (c1 < 1) {
reversec = false;
}
if (reversed) {
d1-=0.001;
} else {
d1+=0.001;
}
if (d1 > 50) {
reversed = true;
} else if (d1 < 1) {
reversed = false;
}
}
```