📄 threejs/Core/Math/MathUtils

File: MathUtils.md | Updated: 11/15/2025


title: MathUtils category: Core layout: docs

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