import type { Vec4, Vec4Like } from './types'; /** Create a Vec4 (zero vector by default). */ export declare function create(x?: number, y?: number, z?: number, w?: number): Vec4; /** Allocate a new Vec4 copy. */ export declare function clone(a: Vec4Like): Vec4; /** out = a. aliasing-safe (copy(v, v) is a no-op). */ export declare function copy(out: Vec4, a: Vec4Like): Vec4; /** Write the components and return out. */ export declare function set(out: Vec4, x: number, y: number, z: number, w: number): Vec4; /** * Approximate equality: every component differs by ≤ epsilon. NaN inputs always return false (IEEE 754). */ export declare function equals(a: Vec4Like, b: Vec4Like, epsilon?: number): boolean; /** out = a + b. aliasing-safe. */ export declare function add(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4; /** out = a - b. aliasing-safe. */ export declare function sub(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4; /** out = a * s. */ export declare function scale(out: Vec4, a: Vec4Like, s: number): Vec4; /** out = -a. The `0 - x` form avoids -0. */ export declare function negate(out: Vec4, a: Vec4Like): Vec4; /** Dot product a · b (4 components). */ export declare function dot(a: Vec4Like, b: Vec4Like): number; /** Squared length |a|² (avoids sqrt overhead). */ export declare function lengthSq(a: Vec4Like): number; /** Euclidean length |a|. */ export declare function length(a: Vec4Like): number; /** Distance between two points |a - b|. */ export declare function distance(a: Vec4Like, b: Vec4Like): number; /** * out = a / |a| (unit-length). * * @degrade Zero vector (|a|² < EPS_NORMALIZE) silently falls back to the zero vector; * no NaN, no throw (gl-matrix style, AC-06 / D-P12). * @degrade NaN inputs → NaN outputs: when a component is NaN, lenSq=NaN; the `lenSq < EPS` * branch is false → goes through 1/sqrt(NaN)=NaN → output is all NaN (IEEE-754 NaN propagation; * still does not throw). * * @example * ```ts * vec4.normalize(out, [1, 2, 2, 0]); // → (1/3, 2/3, 2/3, 0) * vec4.normalize(out, [0, 0, 0, 0]); // → (0, 0, 0, 0) zero vector falls back (AC-06 no throw) * vec4.normalize(out, [NaN, 1, 0, 0]); // → all NaN, IEEE-754 propagation * ``` */ export declare function normalize(out: Vec4, a: Vec4Like): Vec4; /** out = lerp(a, b, t). t is not clamped (extrapolation semantics). aliasing-safe. */ export declare function lerp(out: Vec4, a: Vec4Like, b: Vec4Like, t: number): Vec4; /** * out = frame-rate-INDEPENDENT exponential smoothing of `current` toward `target`: * `lerp(current, target, 1 − exp(−decayRate · dt))`. Semantics match Bevy * `StableInterpolate::smooth_nudge` / three.js `MathUtils.damp` (1st-order decay, NOT Unity * `SmoothDamp`'s 2nd-order spring). `dt=0` → out=current; large `decayRate·dt` → out≈target. * Frame-rate independent by construction (one `dt` step = two composed `dt/2` steps). aliasing-safe. * See vec3.smoothDamp for the full contract. */ export declare function smoothDamp(out: Vec4, current: Vec4Like, target: Vec4Like, decayRate: number, dt: number): Vec4; /** Component-wise min. */ export declare function min(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4; /** Component-wise max. */ export declare function max(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4; //# sourceMappingURL=vec4.d.ts.map