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 type OrthonormalTwoFrameInput4 = readonly [ VecN | ArrayLike, VecN | ArrayLike ]; export type OrthonormalTwoFrame4 = readonly [VecN, VecN]; export interface PlanarRotationConstraintBlock4Options { readonly id: string; readonly participantA: ConstraintParticipant4; readonly participantB: ConstraintParticipant4; /** Current ordered orthonormal world two-frame carried by participant A. */ readonly fixedFrameA: OrthonormalTwoFrameInput4; /** Current ordered orthonormal world two-frame carried by participant B. */ readonly fixedFrameB: OrthonormalTwoFrameInput4; /** Previous three-frame, projected forward for coordinate continuity. */ readonly previousFirstTangentBasis?: readonly VecN[]; /** Previous complementary two-frame, projected forward for continuity. */ readonly previousComplementBasis?: readonly VecN[]; /** Guard for either bisector chart. Default 1e-10. */ readonly singularTolerance?: number; /** Rank threshold used while transporting coordinate frames. Default 1e-10. */ readonly frameTolerance?: number; /** Unit-length and orthogonality validation band. Default 1e-10. */ readonly orthonormalTolerance?: number; } export type PlanarRotationConstraintEvaluation4 = { readonly status: 'regular'; readonly block: ConstraintBlock4; readonly fixedFrameA: OrthonormalTwoFrame4; readonly fixedFrameB: OrthonormalTwoFrame4; readonly referenceFrame: OrthonormalTwoFrame4; readonly firstTangentBasis: readonly [VecN, VecN, VecN]; readonly complementBasis: readonly [VecN, VecN]; readonly positionError: Float64Array; readonly firstAntipodalGuard: number; readonly secondBisectorGuard: number; } | { readonly status: 'first-antipodal'; readonly fixedFrameA: OrthonormalTwoFrame4; readonly fixedFrameB: OrthonormalTwoFrame4; readonly firstAntipodalGuard: number; } | { readonly status: 'second-degenerate'; readonly fixedFrameA: OrthonormalTwoFrame4; readonly fixedFrameB: OrthonormalTwoFrame4; readonly referenceDirection0: VecN; readonly firstAntipodalGuard: number; readonly secondBisectorGuard: number; }; export type RegularPlanarRotationConstraint4 = Extract; /** * Builds the five-row Stiefel coordinate which fixes an ordered orthonormal * two-frame and leaves only rotation in its complementary plane free. */ export declare function planarRotationConstraintBlock4(options: PlanarRotationConstraintBlock4Options): PlanarRotationConstraintEvaluation4; export type PlanarRotationJoint4Options = { readonly id: string; readonly bodyA: RigidBody4; readonly localFixedFrameA: OrthonormalTwoFrameInput4; readonly bodyB: RigidBody4; readonly localFixedFrameB: OrthonormalTwoFrameInput4; readonly singularTolerance?: number; readonly frameTolerance?: number; readonly orthonormalTolerance?: number; } | { readonly id: string; readonly bodyA: RigidBody4; readonly localFixedFrameA: OrthonormalTwoFrameInput4; readonly bodyB?: null; readonly worldFixedFrameB: OrthonormalTwoFrameInput4; readonly singularTolerance?: number; readonly frameTolerance?: number; readonly orthonormalTolerance?: number; }; /** Persistent fixed-two-frame binding with one complementary SO(2) free. */ export declare class PlanarRotationJoint4 { readonly id: string; readonly bodyA: RigidBody4; readonly localFixedFrameA: OrthonormalTwoFrame4; readonly bodyB: RigidBody4 | null; readonly fixedFrameB: OrthonormalTwoFrame4; readonly singularTolerance: number; readonly frameTolerance: number; readonly orthonormalTolerance: number; private previousFirstTangentBasis; private previousComplementBasis; constructor(options: PlanarRotationJoint4Options); worldFixedFrameA(): OrthonormalTwoFrame4; worldFixedFrameB(): OrthonormalTwoFrame4; constraint(): PlanarRotationConstraintEvaluation4; resetFrame(): void; } //# sourceMappingURL=planar-rotation-joint4.d.ts.map