import { Rotor4 } from '../math/rotor4.js'; import type { VecN } from '../math/vecn.js'; /** A time-parameterized rotation, sampled per frame. */ export type RotorMotion = (t: number) => Rotor4; /** Constant-rate rotation in one coordinate plane. */ export declare function spin(i: number, j: number, rate: number): RotorMotion; /** * Double rotation in two disjoint coordinate planes with independent * rates. Disjoint-plane bivectors commute, so the exponential of the * sum is exact — no ordering ambiguity. */ export declare function doubleSpin(planeA: [number, number], rateA: number, planeB: [number, number], rateB: number): RotorMotion; /** * Isoclinic rotation: equal-angle double rotation in a plane and its * orthogonal complement — every point of the 3-sphere moves at equal * speed along Clifford-parallel circles. In the paired-quaternion * split, 'left' chirality drives only the left factor and 'right' only * the right; torque-free 4D rigid bodies relax toward exactly these * motions, so they are the natural idle/ambient spins. */ export declare function isoclinicSpin(rate: number, chirality?: 'left' | 'right'): RotorMotion; /** * Removes the component of `rotor` that moves the axis `up`: peels off * the minimal plane rotation taking R·u back to u, leaving a rotation * that stabilizes u (the swing–twist split taken at the vector * stabilizer). The result is the roll-free constraint for cameras and * walk controllers: with u fixed, the admissible motion is the SO(3) * of the orthogonal 3-space. */ export declare function constrainUp(rotor: Rotor4, up: VecN): Rotor4; //# sourceMappingURL=procedural.d.ts.map