import type { Vec3, Vec3Like } from './types'; export interface CatmullRomOptions { readonly closed?: boolean; readonly parameterization?: 'uniform' | 'centripetal' | 'chordal'; } export type Curve3Sampler = (out: Vec3, t: number) => Vec3; /** Whole-path Catmull-Rom, centripetal by default. Open ends extrapolate their * neighbours; closed paths wrap without a duplicate control point. No allocation. * Empty input writes zero, one point is constant, t is clamped to [0,1]. */ export declare function catmullRom(out: Vec3, points: readonly Vec3Like[], t: number, options?: CatmullRomOptions): Vec3; /** Unit direction from the analytic derivative; constant curves write zero. */ export declare function catmullRomTangent(out: Vec3, points: readonly Vec3Like[], t: number, options?: CatmullRomOptions): Vec3; /** Explicit caller-owned chord-length table for a sampler. out.length-1 is the * subdivision count (>=1); rebuild after changing controls. Two Vec3 scratch * allocations per build; distance lookup and curve sampling allocate nothing. * Approximation, not an analytic arc-length guarantee: increase subdivisions * until the application's distance/error budget converges. */ export declare function arcLengths(out: Float32Array, sample: Curve3Sampler): Float32Array; /** Clamp a distance to a valid cumulative table and invert by binary search. * Zero-length paths and nonfinite distance return 0; repeated lengths are safe. * Table comes from arcLengths; lookups are O(log subdivisions). */ export declare function parameterAtDistance(lengths: Float32Array, distance: number): number; //# sourceMappingURL=curve3.d.ts.map