67 lines
1.9 KiB
Kotlin
67 lines
1.9 KiB
Kotlin
package org.openrndr.extra.noise
|
|
|
|
import org.openrndr.math.Polar
|
|
import org.openrndr.math.Vector2
|
|
|
|
/**
|
|
* Polar coordinate front-end for 2D noise functions
|
|
*/
|
|
fun polarFunc(
|
|
noise: (Int, Double, Double) -> Double,
|
|
origin: Vector2 = Vector2.ZERO,
|
|
): (seed: Int, polar: Polar) -> Double {
|
|
return { seed, polar ->
|
|
val c = polar.cartesian + origin
|
|
noise(seed, c.x, c.y)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Polar coordinate front-end for 2D noise functions
|
|
*/
|
|
fun fixedRadiusPolarFunc(
|
|
noise: (Int, Double, Double) -> Double,
|
|
radius: Double,
|
|
origin: Vector2 = Vector2.ZERO,
|
|
): (seed: Int, angleInDegrees: Double) -> Double {
|
|
return { seed, angleInDegrees ->
|
|
val c = Polar(angleInDegrees, radius).cartesian + origin
|
|
noise(seed, c.x, c.y)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Polar coordinate front-end for 2D noise functions with variable offset
|
|
*/
|
|
fun polarOffsetFunc(
|
|
noise: (Int, Double, Double) -> Double,
|
|
origin: Vector2 = Vector2.ZERO,
|
|
|
|
): (seed: Int, polar: Polar, offset: Vector2) -> Double {
|
|
return { seed, polar, offset ->
|
|
val c = polar.cartesian + origin + offset
|
|
noise(seed, c.x, c.y)
|
|
}
|
|
}
|
|
|
|
fun ((Int, Double, Double) -> Double).withPolarInput(origin: Vector2 = Vector2.ZERO): (Int, Polar) -> Double =
|
|
polarFunc(this, origin)
|
|
|
|
fun ((Int, Vector2) -> Double).withPolarInput(origin: Vector2 = Vector2.ZERO): (Int, Polar) -> Double =
|
|
polarFunc(this.withScalarInput(), origin)
|
|
|
|
|
|
fun ((Int, Double, Double) -> Double).withPolarOffsetInput(origin: Vector2 = Vector2.ZERO): (Int, Polar, Vector2) -> Double =
|
|
polarOffsetFunc(this, origin)
|
|
|
|
|
|
fun ((Int, Vector2) -> Double).withPolarOffsetInput(origin: Vector2 = Vector2.ZERO): (Int, Polar, Vector2) -> Double =
|
|
polarOffsetFunc(this.withScalarInput(), origin)
|
|
|
|
|
|
fun ((Int, Double, Double) -> Double).fixedRadiusPolar(
|
|
radius: Double,
|
|
origin: Vector2 = Vector2.ZERO
|
|
): (Int, Double) -> Double =
|
|
fixedRadiusPolarFunc(this, radius, origin)
|