import { VecN } from '@holotope/core'; import { type ConstraintRow4 } from './constraint-row4.js'; import { DistanceCoordinate4, type DistanceCoordinate4Options } from './distance-joint4.js'; export type DistanceIntervalState4 = 'inactive' | 'minimum' | 'maximum'; export interface DistanceIntervalConstraint4 extends ConstraintRow4 { readonly limit: 'minimum' | 'maximum'; /** True for a first-order boundary guardian; false for outside-range repair. */ readonly predictive: boolean; readonly anchorA: VecN; readonly anchorB: VecN; /** Unit direction from anchor B toward anchor A. */ readonly radialDirection: VecN; readonly currentLength: number; readonly boundLength: number; readonly positionError: number; readonly velocityTarget: number; } export interface DistanceIntervalEvaluation4 { readonly state: DistanceIntervalState4; /** Whether observed constant-speed motion crosses the reported bound. */ readonly predictive: boolean; readonly currentLength: number; readonly distanceSpeed: number; readonly predictedLength: number; readonly minLength: number; readonly maxLength: number; } export type DistanceIntervalJoint4Options = DistanceCoordinate4Options & { readonly minLength: number; readonly maxLength: number; }; /** Two-sided R4 distance interval implemented as two unilateral guardian rows. */ export declare class DistanceIntervalJoint4 extends DistanceCoordinate4 { readonly minLength: number; readonly maxLength: number; constructor(options: DistanceIntervalJoint4Options); /** Observes current and constant-speed predicted state without emitting rows. */ interval(dt: number): DistanceIntervalEvaluation4; /** * Returns both stable unilateral guardian rows. These, rather than the * diagnostic `interval()` result, are the solver input: retaining both rows * lets later motor/contact updates remain inside the first-order speed window. */ constraints(dt: number): readonly DistanceIntervalConstraint4[]; private buildConstraint; private inactive; } //# sourceMappingURL=distance-interval4.d.ts.map