import { VecN } from '@holotope/core'; import type { ConstraintBlock4 } from './constraint-block4.js'; import type { ConstraintParticipant4 } from './constraint-row4.js'; import { RigidBody4 } from './rigid-body4.js'; export interface DirectionConstraintBlock4Options { readonly id: string; readonly participantA: ConstraintParticipant4; readonly participantB: ConstraintParticipant4; /** Current oriented world direction carried by participant A. */ readonly directionA: VecN | ArrayLike; /** Current oriented world direction carried by participant B. */ readonly directionB: VecN | ArrayLike; /** Previous tangent frame, projected forward for coordinate continuity. */ readonly previousTangentBasis?: readonly VecN[]; /** Guard on `1 + directionA dot directionB`. Default 1e-10. */ readonly antipodalTolerance?: number; /** Rank threshold used while transporting the tangent frame. Default 1e-10. */ readonly frameTolerance?: number; } export type DirectionConstraintEvaluation4 = { readonly status: 'regular'; readonly block: ConstraintBlock4; readonly directionA: VecN; readonly directionB: VecN; readonly referenceDirection: VecN; readonly tangentBasis: readonly [VecN, VecN, VecN]; readonly positionError: Float64Array; readonly antipodalGuard: number; } | { readonly status: 'antipodal'; readonly directionA: VecN; readonly directionB: VecN; readonly antipodalGuard: number; }; /** * Builds the three-row quotient coordinate which preserves one oriented R4 * material direction while leaving its SO(3) stabilizer free. */ export declare function directionConstraintBlock4(options: DirectionConstraintBlock4Options): DirectionConstraintEvaluation4; export type DirectionJoint4Options = { readonly id: string; readonly bodyA: RigidBody4; readonly localDirectionA: VecN | ArrayLike; readonly bodyB: RigidBody4; readonly localDirectionB: VecN | ArrayLike; readonly antipodalTolerance?: number; readonly frameTolerance?: number; } | { readonly id: string; readonly bodyA: RigidBody4; readonly localDirectionA: VecN | ArrayLike; readonly bodyB?: null; readonly worldDirectionB: VecN | ArrayLike; readonly antipodalTolerance?: number; readonly frameTolerance?: number; }; /** Persistent local-direction binding with a transported three-coordinate frame. */ export declare class DirectionJoint4 { readonly id: string; readonly bodyA: RigidBody4; readonly localDirectionA: VecN; readonly bodyB: RigidBody4 | null; readonly directionB: VecN; readonly antipodalTolerance: number; readonly frameTolerance: number; private previousTangentBasis; constructor(options: DirectionJoint4Options); worldDirectionA(): VecN; worldDirectionB(): VecN; constraint(): DirectionConstraintEvaluation4; resetFrame(): void; } //# sourceMappingURL=direction-joint4.d.ts.map