106 lines
2.9 KiB
Kotlin
106 lines
2.9 KiB
Kotlin
package org.openrndr.extra.noise
|
|
|
|
inline fun fbm(seed: Int, x: Double, y: Double, z: Double, crossinline noise: (Int, Double, Double, Double) -> Double,
|
|
octaves: Int = 8, lacunarity: Double = 0.5, gain: Double = 0.5): Double {
|
|
var sum = noise(seed, x, y, z)
|
|
var amp = 1.0
|
|
|
|
var x = x
|
|
var y = y
|
|
var z = z
|
|
for (i in 1 until octaves) {
|
|
x *= lacunarity
|
|
y *= lacunarity
|
|
z *= lacunarity
|
|
amp *= gain
|
|
sum += noise(seed + i, x, y, z) * amp
|
|
}
|
|
return sum
|
|
}
|
|
|
|
|
|
inline fun fbm(seed: Int, x: Double, y: Double, crossinline noise: (Int, Double, Double) -> Double,
|
|
octaves: Int = 8, lacunarity: Double = 0.5, gain: Double = 0.5): Double {
|
|
var sum = noise(seed, x, y)
|
|
var amp = 1.0
|
|
|
|
var x = x
|
|
var y = y
|
|
for (i in 1 until octaves) {
|
|
x *= lacunarity
|
|
y *= lacunarity
|
|
amp *= gain
|
|
sum += noise(seed + i, x, y) * amp
|
|
}
|
|
return sum
|
|
}
|
|
|
|
inline fun billow(seed: Int, x: Double, y: Double, z: Double, crossinline noise: (Int, Double, Double, Double) -> Double,
|
|
octaves: Int = 8, lacunarity: Double = 0.5, gain: Double = 0.5) : Double {
|
|
var sum = Math.abs(noise(seed, x, y, z) * 2.0 - 1.0)
|
|
var amp = 1.0
|
|
|
|
var x = x
|
|
var y = y
|
|
var z = z
|
|
for (i in 1 until octaves) {
|
|
x *= lacunarity
|
|
y *= lacunarity
|
|
z *= lacunarity
|
|
amp *= gain
|
|
sum += Math.abs(noise(seed + i, x, y, z) * 2.0 - 1.0) * amp
|
|
}
|
|
return sum
|
|
}
|
|
|
|
inline fun billow(seed: Int, x: Double, y: Double, crossinline noise: (Int, Double, Double) -> Double,
|
|
octaves: Int = 8, lacunarity: Double = 0.5, gain: Double = 0.5) : Double {
|
|
var sum = Math.abs(noise(seed, x, y) * 2.0 - 1.0)
|
|
var amp = 1.0
|
|
|
|
var x = x
|
|
var y = y
|
|
for (i in 1 until octaves) {
|
|
x *= lacunarity
|
|
y *= lacunarity
|
|
amp *= gain
|
|
sum += Math.abs(noise(seed + i, x, y) * 2.0 - 1.0) * amp
|
|
}
|
|
return sum
|
|
}
|
|
|
|
inline fun rigid(seed: Int, x: Double, y: Double, crossinline noise: (Int, Double, Double) -> Double,
|
|
octaves: Int = 8, lacunarity: Double = 0.5, gain: Double = 0.5): Double {
|
|
var sum = 1.0 - Math.abs(noise(seed, x, y))
|
|
var amp = 1.0
|
|
|
|
var x = x
|
|
var y = y
|
|
for (i in 1 until octaves) {
|
|
x *= lacunarity
|
|
y *= lacunarity
|
|
amp *= gain
|
|
sum -= (1.0 - Math.abs(noise(seed + i, x, y))) * amp
|
|
}
|
|
return sum
|
|
}
|
|
|
|
inline fun rigid(seed: Int, x: Double, y: Double, z: Double, crossinline noise: (Int, Double, Double, Double) -> Double,
|
|
octaves: Int = 8, lacunarity: Double = 0.5, gain: Double = 0.5): Double {
|
|
var sum = 1.0 - Math.abs(noise(seed, x, y, z))
|
|
var amp = 1.0
|
|
|
|
var x = x
|
|
var y = y
|
|
var z = z
|
|
for (i in 1 until octaves) {
|
|
x *= lacunarity
|
|
y *= lacunarity
|
|
z *= lacunarity
|
|
amp *= gain
|
|
sum -= (1.0 - Math.abs(noise(seed + i, x, y, z))) * amp
|
|
}
|
|
return sum
|
|
}
|
|
|