Bukkit  1.4.7-R1.0
 All Classes Namespaces Files Functions Variables Enumerator Pages
NoiseGenerator.java
Go to the documentation of this file.
1 package org.bukkit.util.noise;
2 
6 public abstract class NoiseGenerator {
7  protected final int perm[] = new int[512];
8  protected double offsetX;
9  protected double offsetY;
10  protected double offsetZ;
11 
18  public static int floor(double x) {
19  return x >= 0 ? (int) x : (int) x - 1;
20  }
21 
22  protected static double fade(double x) {
23  return x * x * x * (x * (x * 6 - 15) + 10);
24  }
25 
26  protected static double lerp(double x, double y, double z) {
27  return y + x * (z - y);
28  }
29 
30  protected static double grad(int hash, double x, double y, double z) {
31  hash &= 15;
32  double u = hash < 8 ? x : y;
33  double v = hash < 4 ? y : hash == 12 || hash == 14 ? x : z;
34  return ((hash & 1) == 0 ? u : -u) + ((hash & 2) == 0 ? v : -v);
35  }
36 
43  public double noise(double x) {
44  return noise(x, 0, 0);
45  }
46 
54  public double noise(double x, double y) {
55  return noise(x, y, 0);
56  }
57 
66  public abstract double noise(double x, double y, double z);
67 
77  public double noise(double x, int octaves, double frequency, double amplitude) {
78  return noise(x, 0, 0, octaves, frequency, amplitude);
79  }
80 
91  public double noise(double x, int octaves, double frequency, double amplitude, boolean normalized) {
92  return noise(x, 0, 0, octaves, frequency, amplitude, normalized);
93  }
94 
105  public double noise(double x, double y, int octaves, double frequency, double amplitude) {
106  return noise(x, y, 0, octaves, frequency, amplitude);
107  }
108 
120  public double noise(double x, double y, int octaves, double frequency, double amplitude, boolean normalized) {
121  return noise(x, y, 0, octaves, frequency, amplitude, normalized);
122  }
123 
135  public double noise(double x, double y, double z, int octaves, double frequency, double amplitude) {
136  return noise(x, y, z, octaves, frequency, amplitude, false);
137  }
138 
151  public double noise(double x, double y, double z, int octaves, double frequency, double amplitude, boolean normalized) {
152  double result = 0;
153  double amp = 1;
154  double freq = 1;
155  double max = 0;
156 
157  for (int i = 0; i < octaves; i++) {
158  result += noise(x * freq, y * freq, z * freq) * amp;
159  max += amp;
160  freq *= frequency;
161  amp *= amplitude;
162  }
163 
164  if (normalized) {
165  result /= max;
166  }
167 
168  return result;
169  }
170 }