Slide 53
Slide 53 text
public class AnimationLoop extends AnimationTimer {
public AnimationLoop(Canvas c, long t0, double n, double u, double m) {...}
private static double computeIntensity(final double x, final double y, final double s, final double t) {
double intensity = 1;
for (double d = intensity * 4, df = 1; .025 < df * intensity; intensity -= .025) {
double X = d * x / s - d / 2;
double Y = d * y / s - d / 2;
double Z = d / 2 - 9;
df = (X * X +
Y * Y * Math.cos(t/6 + Math.cos(d - X - Y)) +
Z * Z) / 12
- 1 + Math.cos(X + t) * Math.cos(Y - t);
d += df;
}
return intensity;
}
@Override
public void handle(long currentNanoTime) {
double t = (currentNanoTime - t0) / (500 * oneMillisecondInNanoTime);
gc.clearRect(0, 0, w, h); // clear the Canvas
for (int x = 0; x < n; x++) {
for (int y = 0; y < n; y++) {
double i = computeIntensity(x, y, n, t);
gc.setGlobalAlpha(i);
gc.fillOval(x * u, y * u, i * m * 1.4, i * m * 1.4);
}
}
}
}