import { MatN, type PlaneRotation } from './matn.js'; import { VecN } from './vecn.js'; /** * An element of so(n) — the Lie algebra of N-dimensional rotations — * stored as coefficients over the coordinate-plane basis. * * Coefficient order: (0,1), (0,2), …, (0,n−1), (1,2), …, (n−2,n−1). * A coefficient θ on plane (i,j) generates rotation of axis i toward * axis j (matching `MatN.rotationInPlane`); there are n(n−1)/2 of them. * * Bivectors are the dimension-correct replacement for axis-angle vectors: * in 3D the plane count happens to equal the axis count (3), in 4D there * are 6 planes, and no "rotation axis" exists. */ export declare class BivectorN { readonly n: number; readonly coeffs: Float64Array; constructor(n: number, coeffs?: ArrayLike); /** Flat index of plane (i,j) with i < j. */ static planeIndex(n: number, i: number, j: number): number; static fromPlanes(n: number, planes: readonly PlaneRotation[]): BivectorN; /** Coefficient on plane (i,j); antisymmetric, so get(j,i) = −get(i,j). */ get(i: number, j: number): number; set(i: number, j: number, value: number): this; clone(): BivectorN; scale(s: number): this; /** * The corresponding skew-symmetric matrix Ω, acting as dx = Ω·x: * Ω[j][i] = +θ_ij and Ω[i][j] = −θ_ij for i < j. */ toSkewMatrix(): MatN; } /** Exterior product of two vectors: (a ∧ b)_ij = a_i b_j - a_j b_i. */ export declare function wedgeVectors(left: VecN, right: VecN): BivectorN; /** * The exponential map so(n) → SO(n): converts an infinitesimal rotation * (or an angular-velocity bivector times a timestep) into a rotation * matrix. * * Implementation: scaling-and-squaring with a Taylor series — scale the * skew matrix down by 2^s until its norm is small, sum the series to * convergence, square s times, then re-orthonormalize to shed the last * bits of floating-point drift. Exact for the n=3 axis-angle case and the * single-plane case (verified against `MatN.rotationInPlane` in tests). */ export declare function expBivector(b: BivectorN): MatN; //# sourceMappingURL=bivector.d.ts.map