Skip to main content

MathUtilsKt

Contains some math utilities with built-in casting.

Because I'm lazy, in the regular MathUtils class, I declared functions as Number.function(...): Double instead of writing explicit overloads for each type.

This can get annoying because Kotlin doesn't support implicit casting, so you have to do something like this:

val c: Int = 1.clamp(min = 0, max = 10).toDouble()

This class contains most of the same functions, but uses reified types to cast the result to the type you want, often implicitly. For example:

val c: Int = 1.clamp(min = 0, max = 10)
// or
val c = 1.clamp<Int>(min = 0, max = 10)

It's also really nice when reassigning a variable:

var c: Int = 1

// Some lines later...

c = c.clamp(min = 0, max = 10)

Currently, supported functions include:

  • Number.toIn(from: DistanceUnit = DistanceUnit.CM)
  • Number.toCm(from: DistanceUnit = DistanceUnit.INCHES)
  • Number.toRad(from: AngleUnit = AngleUnit.DEGREES)
  • Number.clamp(min: Number, max: Number)
  • avg(vararg xs: Number)
  • maxMagnitude(vararg xs: Number)
  • maxMagnitudeAbs(vararg xs: Number)
  • Number.withDeadzone(deadzone: Number, origin: Number = 0.0)

There's also an infix pow function, Number.pow(exponent: Number), which doesn't support implicit casting, but it's still nicer than double1.pow(double2) since you can just do double1 pow double2.