Starsector API
Loading...
Searching...
No Matches
Noise.java
Go to the documentation of this file.
1package com.fs.starfarer.api.util;
2
3import java.util.Arrays;
4import java.util.Random;
5
6public class Noise {
7 public static Random random = new Random(Misc.genRandomSeed());
8
9 public static float[] genNoise(int size, float spikes) {
10 float [] noise = new float[size];
11 Arrays.fill(noise, -1);
12 //noise[size/2] = 1f;
13// noise[0] = 0f;
14// noise[size - 1] = 0f;
15 noise[0] = 1f;
16 noise[size - 1] = 1f;
17 genNoise(noise, 0, size - 1, 1, spikes);
18 normalizeNoise(noise, 0, 1);
19 return noise;
20 }
21
22
23 public static void genNoise(float[] noise, int x1, int x2, int iter, float spikes) {
24 if (x1 + 1 >= x2)
25 return; // no more values to fill
26
27 int midX = (x1 + x2) / 2;
28
29 fill(noise, midX, x1, x2, iter, spikes);
30
31 genNoise(noise, x1, midX, iter + 1, spikes);
32 genNoise(noise, midX, x2, iter + 1, spikes);
33 }
34
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) {
41 maxNoise = noise[i];
42 }
43 if (noise[i] < minNoise) {
44 minNoise = noise[i];
45 }
46 }
47 if (minNoise >= maxNoise) return;
48
49 float range = maxNoise - minNoise;
50 for (int i = 0; i < noise.length; i++) {
51 if (noise[i] != -1) {
52 noise[i] = min + ((noise[i] - minNoise) / range * (max - min));
53 } else {
54 if (i > 0) {
55 noise[i] = noise[i - 1];
56 } else if (i < noise.length - 1) {
57 noise[i] = noise[i + 1];
58 } else {
59 noise[i] = .5f;
60 }
61 }
62 }
63 }
64
65 private static void fill(float[] noise, int x, int x1, int x2, int iter, float spikes) {
66 if (noise[x] == -1) {
67 float avg = (noise[x1] + noise[x2]) / 2f;
68 noise[x] = avg + ((float) Math.pow(spikes, (iter)) * (float) (random.nextDouble() - .5f));
69 }
70 }
71}
static void genNoise(float[] noise, int x1, int x2, int iter, float spikes)
Definition Noise.java:23
static float[] genNoise(int size, float spikes)
Definition Noise.java:9