Files
orx/orx-noise/src/commonMain/kotlin/Polar.kt
2025-01-19 11:01:54 +01:00

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)