1: Quadratic iterator
The parameters that are most interesting to tweak are a
, m
and x0
. w
sets the width of the window.
float a = 2.75;
int m = 3;
float x0 = 0.10;
boolean animate = false;
float w = 300;
int left = 30;
int imax = 10;
float xn;
float lastX, lastY;
int timer;
void setup() {
size(400, 400);
//noLoop();
}
void draw() {
if (animate == true) {
if (millis() - timer >= 5) {
background(255);
quadratic(m, a, x0);
//++m;
a += 0.01;
//x0 += 0.001;
println(a);
timer = millis();
}
} else {
println(a);
quadratic(m, a, x0);
}
}
void quadratic(int m, float a, float x0) {
// REM DRAW BISECTOR AND FUNCTION
line(left+w, left, left, left+w);
lastX = left;
lastY=left+w;
for (int i = 1; i <= w; ++i) {
xn = i/w;
for (int k = 1; k <= m; ++k)
xn = a*xn*(1-xn);
line(lastX, lastY, i+left, left+w*(1-xn));
lastX = i+left;
lastY = left+w*(1-xn);
}
// REM START AT X0
xn = x0;
point(left+w*xn, left+w);
for (int i = 1; i <= imax; ++i) {
// REM EVALUATE FUNCTION
for (int k = 1; k <= m; ++k)
xn = a*xn*(1-xn);
// REM DRAW VERTICAL AND HORIZONTAL LINE
line(lastX, lastY, left+w*x0, left+w*(1-xn));
line(left+w*x0, left+w*(1-xn), left+w*xn, left+w*(1-xn));
lastX = left+w*xn;
lastY = left+w*(1-xn);
x0 = xn;
}
}