Skip to content

@web-engine-dev/math


@web-engine-dev/math / MathUtils

Variable: MathUtils

const MathUtils: object

Common mathematical utility functions for game development. Includes interpolation, clamping, angle conversions, and geometric utilities.

Type Declaration

DEG_TO_RAD

DEG_TO_RAD: number

Degrees to radians multiplier

EPSILON

EPSILON: number = 1e-6

Small epsilon for floating point comparisons

HALF_PI

HALF_PI: number

Half PI (90 degrees in radians)

PI

PI: number = Math.PI

PI constant

RAD_TO_DEG

RAD_TO_DEG: number

Radians to degrees multiplier

TWO_PI

TWO_PI: number

Two PI (full circle in radians)

angleDifference()

angleDifference(from, to): number

Returns the shortest angular distance between two angles (in radians). Result is in range [-PI, PI].

Parameters

from

number

to

number

Returns

number

approximately()

approximately(a, b, epsilon?): boolean

Checks if two numbers are approximately equal.

Parameters

a

number

b

number

epsilon?

number = 1e-6

Returns

boolean

barycentricCoords2D()

barycentricCoords2D(p, a, b, c): Vec3

Computes barycentric coordinates of a point relative to a triangle (2D).

Parameters

p

Vec2

Point to compute coordinates for

a

Vec2

Triangle vertex A

b

Vec2

Triangle vertex B

c

Vec2

Triangle vertex C

Returns

Vec3

Vec3 with barycentric coordinates (u, v, w) where p = ua + vb + w*c

barycentricCoords3D()

barycentricCoords3D(p, a, b, c): Vec3

Computes barycentric coordinates of a point relative to a triangle (3D).

Parameters

p

Vec3

Point to compute coordinates for

a

Vec3

Triangle vertex A

b

Vec3

Triangle vertex B

c

Vec3

Triangle vertex C

Returns

Vec3

Vec3 with barycentric coordinates (u, v, w) where p = ua + vb + w*c

barycentricInterpolate()

barycentricInterpolate(bary, valueA, valueB, valueC): number

Interpolates a value using barycentric coordinates.

Parameters

bary

Vec3

valueA

number

valueB

number

valueC

number

Returns

number

barycentricInterpolateVec3()

barycentricInterpolateVec3(bary, valueA, valueB, valueC): Vec3

Interpolates a Vec3 using barycentric coordinates.

Parameters

bary

Vec3

valueA

Vec3

valueB

Vec3

valueC

Vec3

Returns

Vec3

bezierCubic()

bezierCubic(p0, p1, p2, p3, t): number

Evaluates a cubic Bezier curve at parameter t.

Parameters

p0

number

Start point

p1

number

First control point

p2

number

Second control point

p3

number

End point

t

number

Parameter (0-1)

Returns

number

bezierCubicTangent()

bezierCubicTangent(p0, p1, p2, p3, t): number

Evaluates the tangent (derivative) of a cubic Bezier curve at t.

Parameters

p0

number

p1

number

p2

number

p3

number

t

number

Returns

number

bezierCubicTangentVec3()

bezierCubicTangentVec3(p0, p1, p2, p3, t): Vec3

Evaluates a cubic Bezier tangent for Vec3.

Parameters

p0

Vec3

p1

Vec3

p2

Vec3

p3

Vec3

t

number

Returns

Vec3

bezierCubicVec2()

bezierCubicVec2(p0, p1, p2, p3, t): Vec2

Evaluates a cubic Bezier curve for Vec2.

Parameters

p0

Vec2

p1

Vec2

p2

Vec2

p3

Vec2

t

number

Returns

Vec2

bezierCubicVec3()

bezierCubicVec3(p0, p1, p2, p3, t): Vec3

Evaluates a cubic Bezier curve for Vec3.

Parameters

p0

Vec3

p1

Vec3

p2

Vec3

p3

Vec3

t

number

Returns

Vec3

bezierQuadratic()

bezierQuadratic(p0, p1, p2, t): number

Evaluates a quadratic Bezier curve at parameter t.

Parameters

p0

number

Start point

p1

number

Control point

p2

number

End point

t

number

Parameter (0-1)

Returns

number

bezierQuadraticTangent()

bezierQuadraticTangent(p0, p1, p2, t): number

Evaluates the tangent (derivative) of a quadratic Bezier curve at t.

Parameters

p0

number

p1

number

p2

number

t

number

Returns

number

bezierQuadraticVec2()

bezierQuadraticVec2(p0, p1, p2, t): Vec2

Evaluates a quadratic Bezier curve for Vec2.

Parameters

p0

Vec2

p1

Vec2

p2

Vec2

t

number

Returns

Vec2

bezierQuadraticVec3()

bezierQuadraticVec3(p0, p1, p2, t): Vec3

Evaluates a quadratic Bezier curve for Vec3.

Parameters

p0

Vec3

p1

Vec3

p2

Vec3

t

number

Returns

Vec3

catmullRom()

catmullRom(p0, p1, p2, p3, t, alpha?): number

Evaluates a Catmull-Rom spline at parameter t.

Parameters

p0

number

Point before segment start

p1

number

Segment start point

p2

number

Segment end point

p3

number

Point after segment end

t

number

Parameter (0-1) within the p1-p2 segment

alpha?

number = 0.5

Tension parameter (0.5 = centripetal, 0 = uniform, 1 = chordal)

Returns

number

catmullRomVec3()

catmullRomVec3(p0, p1, p2, p3, t, tension?): Vec3

Evaluates a Catmull-Rom spline for Vec3.

Parameters

p0

Vec3

p1

Vec3

p2

Vec3

p3

Vec3

t

number

tension?

number = 0.5

Returns

Vec3

clamp()

clamp(value, min, max): number

Clamps a value between min and max.

Parameters

value

number

min

number

max

number

Returns

number

clamp01()

clamp01(value): number

Clamps a value to [0, 1].

Parameters

value

number

Returns

number

closestPointOnLineSegment()

closestPointOnLineSegment(point, segStart, segEnd): Vec3

Computes the closest point on a line segment to a point.

Parameters

point

Vec3

segStart

Vec3

segEnd

Vec3

Returns

Vec3

damp()

damp(current, target, decay, deltaTime): number

Exponential decay interpolation (frame-rate independent smoothing).

Parameters

current

number

Current value

target

number

Target value

decay

number

Decay rate (higher = faster, typical range 1-25)

deltaTime

number

Time step

Returns

number

Example

ts
// Smooth camera follow (frame-rate independent)
camera.x = MathUtils.damp(camera.x, target.x, 10, deltaTime);

degToRad()

degToRad(degrees): number

Converts degrees to radians.

Parameters

degrees

number

Returns

number

distanceToLineSegment()

distanceToLineSegment(point, segStart, segEnd): number

Computes the distance from a point to a line segment.

Parameters

point

Vec3

segStart

Vec3

segEnd

Vec3

Returns

number

easeInCubic()

easeInCubic(t): number

Cubic ease-in.

Parameters

t

number

Returns

number

easeInExpo()

easeInExpo(t): number

Exponential ease-in.

Parameters

t

number

Returns

number

easeInOutCubic()

easeInOutCubic(t): number

Cubic ease-in-out.

Parameters

t

number

Returns

number

easeInOutQuad()

easeInOutQuad(t): number

Quadratic ease-in-out.

Parameters

t

number

Returns

number

easeInOutSine()

easeInOutSine(t): number

Sine ease-in-out.

Parameters

t

number

Returns

number

easeInQuad()

easeInQuad(t): number

Quadratic ease-in.

Parameters

t

number

Returns

number

easeInSine()

easeInSine(t): number

Sine ease-in.

Parameters

t

number

Returns

number

easeOutBounce()

easeOutBounce(t): number

Bounce ease-out.

Parameters

t

number

Returns

number

easeOutCubic()

easeOutCubic(t): number

Cubic ease-out.

Parameters

t

number

Returns

number

easeOutElastic()

easeOutElastic(t): number

Elastic ease-out (bounce at end).

Parameters

t

number

Returns

number

easeOutExpo()

easeOutExpo(t): number

Exponential ease-out.

Parameters

t

number

Returns

number

easeOutQuad()

easeOutQuad(t): number

Quadratic ease-out.

Parameters

t

number

Returns

number

easeOutSine()

easeOutSine(t): number

Sine ease-out.

Parameters

t

number

Returns

number

fract()

fract(value): number

Returns the fractional part of a number.

Parameters

value

number

Returns

number

inverseLerp()

inverseLerp(a, b, value): number

Inverse linear interpolation: returns t such that lerp(a, b, t) = value.

Parameters

a

number

b

number

value

number

Returns

number

isInsideTriangle()

isInsideTriangle(bary): boolean

Checks if barycentric coordinates represent a point inside the triangle.

Parameters

bary

Vec3

Returns

boolean

isNegative()

isNegative(value, epsilon?): boolean

Checks if a number is negative (less than -epsilon).

Parameters

value

number

epsilon?

number = 1e-6

Returns

boolean

isPositive()

isPositive(value, epsilon?): boolean

Checks if a number is positive (greater than epsilon).

Parameters

value

number

epsilon?

number = 1e-6

Returns

boolean

isZero()

isZero(value, epsilon?): boolean

Checks if a number is approximately zero.

Parameters

value

number

epsilon?

number = 1e-6

Returns

boolean

lerp()

lerp(a, b, t): number

Linear interpolation between two values.

Parameters

a

number

b

number

t

number

Returns

number

lerpAngle()

lerpAngle(from, to, t): number

Linear interpolation of angles, taking the shortest path.

Parameters

from

number

to

number

t

number

Returns

number

linearStep()

linearStep(edge0, edge1, x): number

Linear step function: returns 0 below edge0, 1 above edge1, linear in between.

Parameters

edge0

number

edge1

number

x

number

Returns

number

moveTowards()

moveTowards(current, target, maxDelta): number

Moves a value towards a target by a maximum delta.

Parameters

current

number

target

number

maxDelta

number

Returns

number

normalizeAngle()

normalizeAngle(angle): number

Normalizes an angle to the range [-PI, PI].

Parameters

angle

number

Returns

number

normalizeAnglePositive()

normalizeAnglePositive(angle): number

Normalizes an angle to the range [0, 2*PI].

Parameters

angle

number

Returns

number

projectPointOnLine()

projectPointOnLine(point, lineStart, lineEnd): Vec3

Projects a 3D point onto a line defined by two points.

Parameters

point

Vec3

lineStart

Vec3

lineEnd

Vec3

Returns

Vec3

radToDeg()

radToDeg(radians): number

Converts radians to degrees.

Parameters

radians

number

Returns

number

randomInsideUnitCircle()

randomInsideUnitCircle(rng?): Vec2

Returns a random point inside a unit circle (2D).

Parameters

rng?

Optional seeded RNG for deterministic output

next

Returns

Vec2

randomInsideUnitSphere()

randomInsideUnitSphere(rng?): Vec3

Returns a random point inside a unit sphere.

Parameters

rng?

Optional seeded RNG for deterministic output

next

Returns

Vec3

randomInt()

randomInt(min, max, rng?): number

Returns a random integer in the range [min, max].

Parameters

min

number

Minimum value (inclusive)

max

number

Maximum value (inclusive)

rng?

Optional seeded RNG for deterministic output

next

Returns

number

randomRange()

randomRange(min, max, rng?): number

Returns a random float in the range [min, max).

Parameters

min

number

Minimum value (inclusive)

max

number

Maximum value (exclusive)

rng?

Optional seeded RNG for deterministic output

next

Returns

number

randomUnitVec2()

randomUnitVec2(rng?): Vec2

Returns a random unit Vec2.

Parameters

rng?

Optional seeded RNG for deterministic output

next

Returns

Vec2

randomUnitVec3()

randomUnitVec3(rng?): Vec3

Returns a random unit Vec3 (uniformly distributed on unit sphere).

Parameters

rng?

Optional seeded RNG for deterministic output

next

Returns

Vec3

randomVec2()

randomVec2(rng?): Vec2

Returns a random Vec2 with components in the range [-1, 1].

Parameters

rng?

Optional seeded RNG for deterministic output

next

Returns

Vec2

randomVec3()

randomVec3(rng?): Vec3

Returns a random Vec3 with components in the range [-1, 1].

Parameters

rng?

Optional seeded RNG for deterministic output

next

Returns

Vec3

remap()

remap(value, inMin, inMax, outMin, outMax): number

Remaps a value from one range to another.

Parameters

value

number

inMin

number

inMax

number

outMin

number

outMax

number

Returns

number

sign()

sign(value): number

Returns the sign of a number (-1, 0, or 1).

Parameters

value

number

Returns

number

smootherStep()

smootherStep(edge0, edge1, x): number

Smoother step interpolation (Ken Perlin's improved smoothstep).

Parameters

edge0

number

edge1

number

x

number

Returns

number

smoothStep()

smoothStep(edge0, edge1, x): number

Smooth step interpolation (Hermite interpolation). Returns 0 for x <= edge0, 1 for x >= edge1, smooth curve in between.

Parameters

edge0

number

edge1

number

x

number

Returns

number

Example

ts
// Fade in over distance 5-15
const alpha = MathUtils.smoothStep(5, 15, distance);

triangleArea2D()

triangleArea2D(a, b, c): number

Computes the area of a triangle given three 2D points.

Parameters

a

Vec2

b

Vec2

c

Vec2

Returns

number

triangleArea3D()

triangleArea3D(a, b, c): number

Computes the area of a triangle given three 3D points.

Parameters

a

Vec3

b

Vec3

c

Vec3

Returns

number

triangleCentroid()

triangleCentroid(a, b, c): Vec3

Computes the centroid of a triangle.

Parameters

a

Vec3

b

Vec3

c

Vec3

Returns

Vec3

triangleNormal()

triangleNormal(a, b, c): Vec3

Computes the normal of a triangle.

Parameters

a

Vec3

b

Vec3

c

Vec3

Returns

Vec3

Example

ts
// Angle conversion
const radians = MathUtils.degToRad(90);  // π/2

// Interpolation
const mid = MathUtils.lerp(0, 100, 0.5);  // 50
const smooth = MathUtils.smoothStep(0, 1, 0.5);  // Smooth curve

// Clamping
const clamped = MathUtils.clamp(150, 0, 100);  // 100

Proprietary software. All rights reserved.