9 public static float[]
genNoise(
int size,
float spikes) {
10 float [] noise =
new float[size];
11 Arrays.fill(noise, -1);
17 genNoise(noise, 0, size - 1, 1, spikes);
18 normalizeNoise(noise, 0, 1);
23 public static void genNoise(
float[] noise,
int x1,
int x2,
int iter,
float spikes) {
27 int midX = (x1 + x2) / 2;
29 fill(noise, midX, x1, x2, iter, spikes);
31 genNoise(noise, x1, midX, iter + 1, spikes);
32 genNoise(noise, midX, x2, iter + 1, spikes);
35 private static void normalizeNoise(
float[] noise,
float min,
float max) {
36 float minNoise = Float.MAX_VALUE;
37 float maxNoise = -Float.MAX_VALUE;
38 for (
int i = 0; i < noise.length; i++) {
39 if (noise[i] == -1)
continue;
40 if (noise[i] > maxNoise) {
43 if (noise[i] < minNoise) {
47 if (minNoise >= maxNoise)
return;
49 float range = maxNoise - minNoise;
50 for (
int i = 0; i < noise.length; i++) {
52 noise[i] = min + ((noise[i] - minNoise) / range * (max - min));
55 noise[i] = noise[i - 1];
56 }
else if (i < noise.length - 1) {
57 noise[i] = noise[i + 1];
65 private static void fill(
float[] noise,
int x,
int x1,
int x2,
int iter,
float spikes) {
67 float avg = (noise[x1] + noise[x2]) / 2f;
68 noise[x] = avg + ((float) Math.pow(spikes, (iter)) * (
float) (
random.nextDouble() - .5f));