introductionToProgramming/week11/Chaos.java
2025-11-10 20:03:04 +01:00

40 lines
No EOL
1.2 KiB
Java

import common.StdDraw;
class Chaos {
public static void main(String[] args) {
var x = 0.01;
var r = Double.parseDouble(args[0]);
var buffer = new double[200];
buffer[0] = x;
StdDraw.enableDoubleBuffering();
var t = 0;
while(true) {
System.out.format("t = %3d; x = %s\n", t, x);
x = Math.clamp(nextGeneration(x, r), 0, 1);
var offset = t % buffer.length;
if(offset == 0) {
StdDraw.clear();
buffer = new double[200];
}
buffer[offset] = x;
for(var toDraw = 0; toDraw < buffer.length; toDraw++) {
var to = buffer[toDraw];
StdDraw.line(toDraw / (double)buffer.length, 0, toDraw / (double) buffer.length, to);
}
if(offset % 10 == 0) {
StdDraw.show();
StdDraw.pause(100);
}
if(offset >= 1 && buffer[offset] == buffer[offset - 1]) { // stabilized value
StdDraw.pause(5000);
}
t += 1;
}
}
static double nextGeneration(double x, double r) {
return r * x * (1 - x);
}
}