import { BivectorN, MatN, Rotor4 } from '@holotope/core'; import type { ConstraintBlock4 } from './constraint-block4.js'; import type { ConstraintParticipant4 } from './constraint-row4.js'; import { type OrientationBranchToken4 } from './orientation-coordinates4.js'; import { RigidBody4 } from './rigid-body4.js'; export interface OrientationConstraintBlock4Options { readonly id: string; readonly participantA: ConstraintParticipant4; readonly participantB: ConstraintParticipant4; /** Current oriented material frame carried by participant A. */ readonly frameA: Rotor4; /** Current target frame carried by participant B or fixed in the world. */ readonly frameB: Rotor4; readonly previousBranch?: OrientationBranchToken4; readonly cutLocusTolerance?: number; readonly branchHysteresis?: number; } export type OrientationConstraintEvaluation4 = { readonly status: 'regular'; readonly block: ConstraintBlock4; readonly frameA: Rotor4; readonly frameB: Rotor4; readonly error: BivectorN; readonly branch: OrientationBranchToken4; readonly cutLocusGuard: number; readonly shortestPairSign: 1 | -1; readonly usesShortestLift: boolean; /** Exact map from A's world-left angular velocity to error rate. */ readonly jacobianA: MatN; /** Exact signed map from B's world-left angular velocity to error rate. */ readonly jacobianB: MatN; } | { readonly status: 'cut-locus'; readonly frameA: Rotor4; readonly frameB: Rotor4; readonly branch: OrientationBranchToken4; readonly cutLocusGuard: number; readonly shortestPairSign: 1 | -1; }; /** * Builds the complete six-row rotational coordinate preserving one oriented * R4 frame. Translation remains deliberately outside this policy. */ export declare function orientationConstraintBlock4(options: OrientationConstraintBlock4Options): OrientationConstraintEvaluation4; export type OrientationJoint4Options = { readonly id: string; readonly bodyA: RigidBody4; readonly localFrameA?: Rotor4; readonly bodyB: RigidBody4; readonly localFrameB?: Rotor4; readonly cutLocusTolerance?: number; readonly branchHysteresis?: number; } | { readonly id: string; readonly bodyA: RigidBody4; readonly localFrameA?: Rotor4; readonly bodyB?: null; readonly worldFrameB: Rotor4; readonly cutLocusTolerance?: number; readonly branchHysteresis?: number; }; /** Persistent material-frame binding with explicit SO(4) branch continuity. */ export declare class OrientationJoint4 { readonly id: string; readonly bodyA: RigidBody4; readonly localFrameA: Rotor4; readonly bodyB: RigidBody4 | null; /** Body-local when `bodyB` exists; fixed-world otherwise. */ readonly frameB: Rotor4; readonly cutLocusTolerance: number; readonly branchHysteresis: number; private previousBranch; constructor(options: OrientationJoint4Options); worldFrameA(): Rotor4; worldFrameB(): Rotor4; constraint(): OrientationConstraintEvaluation4; resetBranch(): void; } //# sourceMappingURL=orientation-joint4.d.ts.map