int iterations = 100;
String s = "BBBBBBAAAAAA";
ArrayList < Float > d = new ArrayList < Float > ();
float e = 2;
float f = 2;
float zoomx = 1, zoomy = 1;
float a, X, Y, x;
float r(int n, float x, float y) {
if (s.charAt(n % s.length()) == 'A') {
return x;
} else {
return y;
}
}
float A(int n, float x, float y) {
if (n >= d.size()) {
d.add(r(n - 1, x, y) * A(n - 1, x, y) * (1 - A(n - 1, x, y)));
}
return d.get(n);
}
float le(float x, float y) {
float sum = 0;
d.clear();
d.add(0.5);
for (int i = 1; i < iterations; i++) {
sum += log(abs(r(i, x, y) * (1 - 2 * A(i, x, y))));
}
return sum / iterations;
}
void setup() {
size(500, 500);
d.add(0.5);
background(255);
colorMode(HSB, 255);
//temporary range for x and y:
e = (2.5+3.4)/2;
zoomx = 4/(3.4-2.5);
f = (3.4+4)/2;
zoomy = 4/(4-3.4);
frameRate(100000);
}
void mousePressed() {
e = map(mouseX, 0, 500, e - (2 / zoomx), e + (2 / zoomx));
f = map(mouseY, 500, 0, f - (2 / zoomy), f + (2 / zoomy));
zoomx *= 4;
zoomy *= 4;
iterations *= 1.5;
print(e, f);
y = 0;
draw();
}
int y = 0;
void draw() {
if(y <= 500) {
for (x = 0; x < 500; x++) {
X = map(x, 0, 500, e - (2 / zoomx), (2 / zoomx) + e);
Y = map(y, 0, 500, f - (2 / zoomy), f + (2 / zoomy));
//Y = map(y,0,500,3.4,4);
if (Y == 2) {
Y += 0.001;
}
a = le(Y, X);
if (a > 0) {
stroke(175, 0, a * 150);
} else {
stroke(45, 0, 255 - abs(a * 75));
}
point(x, height - y);
}
}
y++;
}