39 lines
955 B
Java
39 lines
955 B
Java
package net.minecraft.world.level.levelgen;
|
|
|
|
import net.minecraft.util.Mth;
|
|
import net.minecraft.util.RandomSource;
|
|
|
|
public class MarsagliaPolarGaussian {
|
|
public final RandomSource randomSource;
|
|
private double nextNextGaussian;
|
|
private boolean haveNextNextGaussian;
|
|
|
|
public MarsagliaPolarGaussian(RandomSource randomSource) {
|
|
this.randomSource = randomSource;
|
|
}
|
|
|
|
public void reset() {
|
|
this.haveNextNextGaussian = false;
|
|
}
|
|
|
|
public double nextGaussian() {
|
|
if (this.haveNextNextGaussian) {
|
|
this.haveNextNextGaussian = false;
|
|
return this.nextNextGaussian;
|
|
} else {
|
|
double d;
|
|
double e;
|
|
double f;
|
|
do {
|
|
d = 2.0 * this.randomSource.nextDouble() - 1.0;
|
|
e = 2.0 * this.randomSource.nextDouble() - 1.0;
|
|
f = Mth.square(d) + Mth.square(e);
|
|
} while (f >= 1.0 || f == 0.0);
|
|
|
|
double g = Math.sqrt(-2.0 * Math.log(f) / f);
|
|
this.nextNextGaussian = e * g;
|
|
this.haveNextNextGaussian = true;
|
|
return d * g;
|
|
}
|
|
}
|
|
}
|