/**
 * Compute the two world endpoints of a capsule's central segment given its
 * pose. The capsule is Y-aligned in body frame; the segment runs from
 * `(0, -h/2, 0)` to `(0, +h/2, 0)`. Writes endpoints into `out` as
 * `[ax, ay, az, bx, by, bz]`.
 *
 * @param {number[]|Float64Array} out length >= 6
 * @param {number} cx capsule centre x
 * @param {number} cy
 * @param {number} cz
 * @param {number} qx quaternion x
 * @param {number} qy
 * @param {number} qz
 * @param {number} qw
 * @param {number} half_height
 */
export function capsule_world_segment(out: number[] | Float64Array, cx: number, cy: number, cz: number, qx: number, qy: number, qz: number, qw: number, half_height: number): void;
/**
 * Capsule (A) vs sphere (B) contact, closed-form via point-segment distance.
 *
 * @param {number[]|Float64Array} out length >= 10
 * @param {number} a_cx  capsule centre x
 * @param {number} a_cy
 * @param {number} a_cz
 * @param {number} a_qx  capsule rotation
 * @param {number} a_qy
 * @param {number} a_qz
 * @param {number} a_qw
 * @param {number} a_radius
 * @param {number} a_half_h capsule half-height (not including caps)
 * @param {number} b_cx  sphere centre x
 * @param {number} b_cy
 * @param {number} b_cz
 * @param {number} b_radius
 * @returns {boolean} true on overlap
 */
export function capsule_sphere_contact(out: number[] | Float64Array, a_cx: number, a_cy: number, a_cz: number, a_qx: number, a_qy: number, a_qz: number, a_qw: number, a_radius: number, a_half_h: number, b_cx: number, b_cy: number, b_cz: number, b_radius: number): boolean;
/**
 * Two capsules (A and B). Reduces to segment-segment closest pair + radius.
 *
 * @param {number[]|Float64Array} out length >= 10
 * @returns {boolean} true on overlap
 */
export function capsule_capsule_contact(out: number[] | Float64Array, a_cx: any, a_cy: any, a_cz: any, a_qx: any, a_qy: any, a_qz: any, a_qw: any, a_radius: any, a_half_h: any, b_cx: any, b_cy: any, b_cz: any, b_qx: any, b_qy: any, b_qz: any, b_qw: any, b_radius: any, b_half_h: any): boolean;
/**
 * Capsule (A) vs oriented box (B). Brings the capsule segment into box-local
 * space, then refines via 2 fixed-point iterations between:
 *   - closest point on the segment to the current box-side candidate
 *   - clamped point on the box closest to the current segment-side candidate
 *
 * Two iterations suffice for the cases this engine targets (sphere-like cap
 * geometry against axis-aligned-in-local box). When the segment passes
 * through the box, the "inside" branch picks the smallest-overlap face
 * deterministically, mirroring {@link sphere_box_contact}.
 *
 * @param {number[]|Float64Array} out length >= 10
 * @returns {boolean}
 */
export function capsule_box_contact(out: number[] | Float64Array, a_cx: any, a_cy: any, a_cz: any, a_qx: any, a_qy: any, a_qz: any, a_qw: any, a_radius: any, a_half_h: any, b_cx: any, b_cy: any, b_cz: any, b_qx: any, b_qy: any, b_qz: any, b_qw: any, b_hx: any, b_hy: any, b_hz: any): boolean;
/**
 * Multi-point capsule-vs-OBB contact generation. Emits up to
 * {@link CAPSULE_BOX_MAX_CONTACTS} contacts into `out` in the
 * `(wax, way, waz, wbx, wby, wbz, nx, ny, nz, depth)` stride layout.
 *
 * The motivation: a capsule lying flat on a face needs more than one
 * contact to rest stably — a single contact at the segment's closest point
 * is positionally ambiguous (every interior segment point is equidistant
 * from the face), and the body wobbles around whichever point the
 * iterative closest-point solver happened to converge on. Two contacts at
 * the cap centres pin the capsule's rotation about its long axis.
 *
 * Algorithm:
 *  1. Closest-point-on-segment vs OBB → primary contact (same as
 *     {@link capsule_box_contact}).
 *  2. Treat each cap centre as a sphere of cap-radius and run
 *     {@link sphere_box_contact} → up to two additional contacts.
 *  3. Dedupe spatially against the primary so a capsule touching with one
 *     cap doesn't emit two contacts at the same point.
 *
 * @param {Float64Array} out length >= CAPSULE_BOX_MAX_CONTACTS * CAPSULE_BOX_CONTACT_STRIDE
 * @param {number} a_cx capsule centre x
 * @param {number} a_cy
 * @param {number} a_cz
 * @param {number} a_qx capsule rotation
 * @param {number} a_qy
 * @param {number} a_qz
 * @param {number} a_qw
 * @param {number} a_radius
 * @param {number} a_half_h
 * @param {number} b_cx box centre x
 * @param {number} b_cy
 * @param {number} b_cz
 * @param {number} b_qx
 * @param {number} b_qy
 * @param {number} b_qz
 * @param {number} b_qw
 * @param {number} b_hx
 * @param {number} b_hy
 * @param {number} b_hz
 * @returns {number} number of contacts emitted, in `[0, CAPSULE_BOX_MAX_CONTACTS]`
 */
export function capsule_box_multi_contacts(out: Float64Array, a_cx: number, a_cy: number, a_cz: number, a_qx: number, a_qy: number, a_qz: number, a_qw: number, a_radius: number, a_half_h: number, b_cx: number, b_cy: number, b_cz: number, b_qx: number, b_qy: number, b_qz: number, b_qw: number, b_hx: number, b_hy: number, b_hz: number): number;
/**
 * Output stride per contact in {@link capsule_box_multi_contacts}.
 * Matches the candidate-buffer layout used by `narrowphase_step`.
 *
 *   0..2  : world contact on capsule side
 *   3..5  : world contact on box side
 *   6..8  : normal from box (B) toward capsule (A)
 *   9     : depth (positive = penetration)
 *
 * @type {number}
 */
export const CAPSULE_BOX_CONTACT_STRIDE: number;
/**
 * Maximum contact points {@link capsule_box_multi_contacts} can emit.
 *  - 1 from the closest-point-on-segment vs OBB query (primary)
 *  - up to 2 from the cap-centre sphere-vs-OBB queries (one per endpoint)
 * @type {number}
 */
export const CAPSULE_BOX_MAX_CONTACTS: number;
//# sourceMappingURL=capsule_contacts.d.ts.map