MathUtils

A collection of math utility functions.

Static Methods

.ceilPowerOfTwo( value : number ) : number

Returns the smallest power of two that is greater than or equal to the given number.

value

The value to find a POT for.

Returns: The smallest power of two that is greater than or equal to the given number.

.clamp( value : number, min : number, max : number ) : number

Clamps the given value between min and max.

value

The value to clamp.

min

The min value.

max

The max value.

Returns: The clamped value.

.damp( x : number, y : number, lambda : number, dt : number ) : number

Smoothly interpolate a number from x to y in a spring-like manner using a delta time to maintain frame rate independent movement. For details, see Frame rate independent damping using lerp.

x

The current point.

y

The target point.

lambda

A higher lambda value will make the movement more sudden, and a lower value will make the movement more gradual.

dt

Delta time in seconds.

Returns: The interpolated value.

.degToRad( degrees : number ) : number

Converts degrees to radians.

degrees

A value in degrees.

Returns: The converted value in radians.

.denormalize( value : number, array : TypedArray ) : number

Denormalizes the given value according to the given typed array.

value

The value to denormalize.

array

The typed array that defines the data type of the value.

Returns: The denormalize (float) value in the range [0,1].

.euclideanModulo( n : number, m : number ) : number

Computes the Euclidean modulo of the given parameters that is ( ( n % m ) + m ) % m.

n

The first parameter.

m

The second parameter.

Returns: The Euclidean modulo.

.floorPowerOfTwo( value : number ) : number

Returns the largest power of two that is less than or equal to the given number.

value

The value to find a POT for.

Returns: The largest power of two that is less than or equal to the given number.

.generateUUID() : string

Generate a UUID (universally unique identifier).

Returns: The UUID.

.inverseLerp( x : number, y : number, value : number ) : number

Returns the percentage in the closed interval [0, 1] of the given value between the start and end point.

x

The start point

y

The end point.

value

A value between start and end.

Returns: The interpolation factor.

.isPowerOfTwo( value : number ) : boolean

Returns true if the given number is a power of two.

value

The value to check.

Returns: Whether the given number is a power of two or not.

.lerp( x : number, y : number, t : number ) : number

Returns a value linearly interpolated from two known points based on the given interval - t = 0 will return x and t = 1 will return y.

x

The start point

y

The end point.

t

The interpolation factor in the closed interval [0, 1].

Returns: The interpolated value.

.mapLinear( x : number, a1 : number, a2 : number, b1 : number, b2 : number ) : number

Performs a linear mapping from range <a1, a2> to range <b1, b2> for the given value.

x

The value to be mapped.

a1

Minimum value for range A.

a2

Maximum value for range A.

b1

Minimum value for range B.

b2

Maximum value for range B.

Returns: The mapped value.

.normalize( value : number, array : TypedArray ) : number

Normalizes the given value according to the given typed array.

value

The float value in the range [0,1] to normalize.

array

The typed array that defines the data type of the value.

Returns: The normalize value.

.pingpong( x : number, length : number ) : number

Returns a value that alternates between 0 and the given length parameter.

x

The value to pingpong.

length

The positive value the function will pingpong to.

Default is 1.

Returns: The alternated value.

.radToDeg( radians : number ) : number

Converts radians to degrees.

radians

A value in radians.

Returns: The converted value in degrees.

.randFloat( low : number, high : number ) : number

Returns a random float from <low, high> interval.

low

The lower value boundary.

high

The upper value boundary

Returns: A random float.

.randFloatSpread( range : number ) : number

Returns a random integer from <-range/2, range/2> interval.

range

Defines the value range.

Returns: A random float.

.randInt( low : number, high : number ) : number

Returns a random integer from <low, high> interval.

low

The lower value boundary.

high

The upper value boundary

Returns: A random integer.

.seededRandom( s : number ) : number

Returns a deterministic pseudo-random float in the interval [0, 1].

s

The integer seed.

Returns: A random float.

.setQuaternionFromProperEuler( q : Quaternion, a : number, b : number, c : number, order : 'XYX' | 'XZX' | 'YXY' | 'YZY' | 'ZXZ' | 'ZYZ' )

Sets the given quaternion from the Intrinsic Proper Euler Angles defined by the given angles and order.

Rotations are applied to the axes in the order specified by order: rotation by angle a is applied first, then by angle b, then by angle c.

q

The quaternion to set.

a

The rotation applied to the first axis, in radians.

b

The rotation applied to the second axis, in radians.

c

The rotation applied to the third axis, in radians.

order

A string specifying the axes order.

.smootherstep( x : number, min : number, max : number ) : number

A variation on smoothstep that has zero 1st and 2nd order derivatives at x=0 and x=1.

x

The value to evaluate based on its position between min and max.

min

The min value. Any x value below min will be 0.

max

The max value. Any x value above max will be 1.

Returns: The alternated value.

.smoothstep( x : number, min : number, max : number ) : number

Returns a value in the range [0,1] that represents the percentage that x has moved between min and max, but smoothed or slowed down the closer x is to the min and max.

See Smoothstep for more details.

x

The value to evaluate based on its position between min and max.

min

The min value. Any x value below min will be 0.

max

The max value. Any x value above max will be 1.

Returns: The alternated value.

Source

src/math/MathUtils.js