Latoocarfian Chaotic Function Tutorial
Illustration: Image slice from A Day In The Life Of A Latoocarfian
By Jim Plaxco
Difficulty Level: Beginner
The heart of algorithmic art is the use of mathematics to create compositions of points, lines, and shapes that are aesthetically pleasing. The field of algorithmic art took on a new look with the introduction of fractal and chaotic functions.
One of these chaotic functions is the Latoocarfian chaotic function. This function was one of the mathematical subjects covered in the book Chaos in Wonderland: Visual Adventures in a Fractal World by Clifford Pickover. The illustration A Day In The Life Of A Latoocarfian was created using a version of the Latoocarfian chaotic function.
The Latoocarfian function relies on the use of the sine function and four parameters. Two of the parameters are used to modify the sine of the x and y input coordinates and the other two are used as sine scaling factors.
The process of identifying four parameters that produce an aesthetically pleasing work of mathematical art is quite an adventure given the infinite number of combinations of values.
If you would like to explore this chaotic function for yourself, following is a pseudocode implementation of the algorithm that can be easily translated into the programming language of your choice.
Pseudocode Implementation of the Latoocarfian chaotic function
Set A to a random number so that -3 < A < 3Set B to a random number so that -3 < B < 3Set C to a random number so that 0.5 < C < 1.5Set D to a random number so that 0.5 < D < 1.5Set Xold to an initial non-zero value so that -0.5 < Xold < 0.5Set Yold to an initial non-zero value so that -0.5 < Yold < 0.5Do Forever or Until Boredom Sets InSet X = sin(Yold * B) + C * sin(Xold * B)Set Y = sin(Xold * A) + D * sin(Yold * A)Put a Dot on the Screen at X, YSet Xold = XSet Yold = YGo Back to the Do StatementEnd of Do Loop
One word of caution. The range of X and Y values that this equation is going to produce is going to be small. By range I mean that all the Xs and Ys are going to be not very far from zero. If you want to be able to see the pattern the equation creates, you will need to multiply your X and Y by some number so as to scale the output to the size of your screen. For example, instead of putting a dot at X,Y you will want to put the dot at X*100, Y*100. And be aware that scaling factors that work well for one combination of parameter values may cause the next combination to be drawn outside your screen's boundaries.
Following is the source code for an implementation of the Latoocarfian chaotic function in the Processing programming language. If you prefer, you can download the source code as a Processing PDE
Processing Language Version of the Latoocarfian chaotic function
// --------------------------------------------------------------// Latoocarfian chaotic function// Implementation based on Clifford Pickover's Chaos in Wonderland// By Jim Plaxco// https://www.artsnova.com/Latoocarfian-chaotic-function.html// --------------------------------------------------------------// Global Variablesfloat a,b,c,d; // the four parametersfloat Xold,Yold; // the old x,y valuesfloat Xnew,Ynew; // the new x,y valuesfloat scaleX=80; // scale to screenfloat scaleY=90; // scale to screenfloat mx,my; // x,y screen center for translatevoid setup(){size(800,600)); // set the screen sizebackground(255);// set screen background to whitestroke(0); // set drawing color to blackstrokeWeight(2);// make larger points for visibilitymx=width/2; // set x value for screen middlemy=height/2; // set y value for screen middleinitializeVariables(); // call function to initialize variables}void draw(){translate(mx,my); // relocate origin to screen centerXnew=sin(Yold*b)+c*sin(Xold*b); // calculate the new x locationYnew=sin(Xold*a)+d*sin(Yold*a); // calculate the new y locationpoint(Xnew*scaleX, Ynew*scaleY);// plot x,y after scaling them upXold=Xnew; Yold=Ynew; // reset the old x,y values}void keyPressed(){if(key==' ') {// make a new Latoocarfian drawingbackground(255); // erase the previous drawinginitializeVariables(); // get a new set of values}else if(key=='p') {// print out the four parameters that were used// in the form of a commented out statementprintln("// a="+a+ "; b=" + b+ "; c=" + c + "; d=" + d + "; //");}}void initializeVariables() {// Restrict the values to the ranges suggested by Pickover// in the book Chaos in Wonderland// Note that some combinations may result in// 1) little to be seen on-screen or// 2) all points being tightly clustered together.a = random(-3.0,3.0);b = random(-3.0,3.0);c = random(0.5,1.5);d = random(-0.5, 1.5);Xold= 0.1;Yold = 0.1;}
Latoocarfian Function Variations
The four parameters a,b,c,d are the key to the output that the program creates. You can experiment by coming up with your own set of ranges for the values. Or maybe you want to define a specific relationship between paramters. For example:
A = random(-3.0,3.0); // get a random value for AB = sqrt(abs(A)): // make B the square root of the absolute value of A
Experimenting with the bounds and relationships between the parameters can produce surprising results. Additionally you may want to try using a different trigonometric function or combination of functions instead of the sine function to see what happens.
One very important note: if you find that you've created a Latoocarfian that you really like, make sure that you record the values of the parameters a,b,c,d as the odds are greatly against you ever coming across that particular combination of parameter values again.
Concluding Thoughts
Algorithmic art, such as that illustrated here with the Latoocarfian chaotic function, is a stimulating and challenging combination of mathematics, algorithm design, and programming. The two most important things are 1) don't be afraid to experiment, and 2) mistakes aren't because they can result in new insights and discoveries.