import { vops, float2 } from './vector'; import { Polynomial } from './polynomial'; export declare class plane> { n: T; d: number; static fromVert>(n: T, p: T): plane; protected constructor(n: T, d: number); dist(p: T): number; } export declare class plane2 extends plane { static fromVerts(p0: float2, p1: float2): plane; } export declare function colinear>(p1: C, p2: C, epsilon?: number): boolean; export interface shape> { evaluate(t: number): T; tangent(t: number): T; evaluateWithDir(t: number): { pos: T; dir: T; }; lengthTo(t: number): number; } type shapeSlice = S & { getT(t: number): number; slice(t0: number, t1: number): shapeSlice; }; export declare function shapeSlice, S extends shape>(base: S, t0: number, t1: number): shapeSlice; export declare function distanceToPoint>(b: shape, p: T, steps?: number): number; export declare function distanceToT>(b: shape, distance: number, steps?: number, tol?: number): number; export declare class line> implements shape { p0: T; p1: T; constructor(p0: T, p1: T); dir(): T; len(): any; evaluate(t: number): T; tangent(): T; evaluateWithDir(t: number): { pos: T; dir: T; }; lengthTo(t: number): number; closestPoint(p: T): T; distanceToPoint(p: T): number; matrix(): { x: T; y: T; z: T; }; } export declare class line2 extends line { intersection(b: line2, colinear?: number): float2; } export declare class circle implements shape { centre: float2; radius: number; constructor(centre: float2, radius: number); evaluate(t: number): float2; tangent(t: number): float2; evaluateWithDir(t: number): { pos: float2; dir: float2; }; lengthTo(t: number): number; } export declare class bezier2> implements shape { c0: T; c1: T; c2: T; constructor(c0: T, c1: T, c2: T); evaluate(t: number): T; tangent(t: number): T; evaluateWithDir(t: number): { pos: T; dir: T; }; lengthTo(t: number): number; split(t?: number): bezierSpline2; slice(t0: number, t1: number): bezier2; } export declare class bezier3> implements shape { c0: T; c1: T; c2: T; c3: T; constructor(c0: T, c1: T, c2: T, c3: T); evaluate(t: number): T; tangent(t: number): T; evaluateWithDir(t: number): { pos: T; dir: T; }; lengthTo(t: number): number; split(t?: number): bezierSpline3; slice(t0: number, t1: number): bezier3; spline(): Polynomial; } declare abstract class spline, S extends shape> implements shape { control: T[]; [i: number]: S; constructor(control: T[]); abstract get length(): number; abstract get(index: number): S; evaluate(t: number): T; tangent(t: number): T; evaluateWithDir(t: number): { pos: T; dir: T; }; lengthTo(t: number): number; } export declare class polygon> extends spline> { get length(): number; get(i: number): line; slice(t0: number, t1: number): bezierSpline2; } export declare class bezierSpline2> extends spline> { get length(): number; get(i: number): bezier2; slice(t0: number, t1: number): bezierSpline2; } export declare class bezierSpline3> extends spline> { get length(): number; get(i: number): bezier3; slice(t0: number, t1: number): bezierSpline3; } export declare function reduce_spline(b: bezier3, max: number, tol: number): bezierSpline2; export {};