[orx-noise] use common gaussian method (#170)
This commit is contained in:
@@ -121,28 +121,7 @@ object Random {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun gaussian(mean: Double = 0.0, standardDeviation: Double = 1.0): Double {
|
fun gaussian(mean: Double = 0.0, standardDeviation: Double = 1.0): Double {
|
||||||
if (hasNextGaussian) {
|
return gaussian(mean, standardDeviation, rnd)
|
||||||
val result = nextGaussian
|
|
||||||
nextGaussian = 0.0
|
|
||||||
hasNextGaussian = false
|
|
||||||
|
|
||||||
return mean + standardDeviation * result
|
|
||||||
} else {
|
|
||||||
var v1 = 0.0
|
|
||||||
var v2 = 0.0
|
|
||||||
var s = 0.0
|
|
||||||
|
|
||||||
while (s >= 1.0 || s == 0.0) {
|
|
||||||
v1 = double() // between -1 and 1
|
|
||||||
v2 = double() // between -1 and 1
|
|
||||||
s = v1 * v1 + v2 * v2
|
|
||||||
}
|
|
||||||
val multiplier = sqrt(-2.0 * ln(s) / s)
|
|
||||||
|
|
||||||
nextGaussian = (v2 * multiplier)
|
|
||||||
hasNextGaussian = true
|
|
||||||
return mean + standardDeviation * (v1 * multiplier)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user