0.1.0 • Published 9 months ago

@footgun/math-gap v0.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

math-gap

math functions that are missing or lacking from the standard javascript library

clamp

It's 2024 and Javascript still doesn't have clamp...

Usage

clamp(value, a, b)

Returns value, if it is between a and b. Otherwise, returns the number it's gone past.

lerp

Linearly interpolate between 2 values

Usage

lerp(a, b, amount)

amount should be a value between 0 and 1, indicating how far to interpolate from a to b

const val = lerp(10, 20, 0.5) // val === 15

sign

Math.sign was added to Javascript somewhat recently. It's behavior regarding 0 is to not give it a positive or negative sign:

Math.sign(1)  // returns 1
Math.sign(0)  // returns 0
Math.sign(-1) // returns -1

In some cases, we want want to consider 0 as a positive value, and alias 0 to 1. This comes up in games and simulations, e.g., a 2d sprite can only face left or right (-1 or 1)

That's what this module does:

sign(1)  // returns 1
sign(0)  // returns 1
sign(-1) // returns -1

to-degrees

Converts radians to its corresponding value in degrees.

const d1 = toDegrees(0.5235987755982988)  // d1 === 29.999999999999996

const d2 = toDegrees(0.5235987755982989)  // d2 === 30.000000000000004

to-radians

Converts degrees to its corresponding value in radians.

const val = toRadians(30) // val === 0.5235987755982988

bitfield

get and set bits

let flags = 0 // a byte (contains 8 bits)
flags = bitfield.set(flags, 0, true)  // flags === 00000001
flags = bitfield.set(flags, 2, true)  // flags === 00000101
console.log(bitfield.get(flags, 2))   // true
console.log(bitfield.get(flags, 1))   // false
flags = bitfield.set(flags, 0, false) // flags === 00000100

quantize-angle

pack/unpack an angle expressed in radians to/frame a byte

const angle = Math.PI * 0.3

const u = new Uint8Array(1)
u[0] = quantizeAngle.pack(angle)


const angle2 = quantizeAngle.unpack(u[0])

console.log(angle === angle2) // true