/**
 * @param {number[]|Float64Array} out length >= CAPSULE_TRIANGLE_MAX_CONTACTS *
 *   CAPSULE_TRIANGLE_CONTACT_STRIDE
 * @param {number} c_cx capsule centre x
 * @param {number} c_cy
 * @param {number} c_cz
 * @param {number} c_qx capsule rotation
 * @param {number} c_qy
 * @param {number} c_qz
 * @param {number} c_qw
 * @param {number} c_radius
 * @param {number} c_half_h capsule half-height (not including caps)
 * @param {number} ax triangle vertex A x (world)
 * @param {number} ay
 * @param {number} az
 * @param {number} bx triangle vertex B x (world)
 * @param {number} by
 * @param {number} bz
 * @param {number} cx triangle vertex C x (world)
 * @param {number} cy
 * @param {number} cz
 * @returns {number} number of contacts emitted, in `[0, CAPSULE_TRIANGLE_MAX_CONTACTS]`
 */
export function capsule_triangle_contact(out: number[] | Float64Array, c_cx: number, c_cy: number, c_cz: number, c_qx: number, c_qy: number, c_qz: number, c_qw: number, c_radius: number, c_half_h: number, ax: number, ay: number, az: number, bx: number, by: number, bz: number, cx: number, cy: number, cz: number): number;
/**
 * Multi-point capsule-vs-triangle contact generation.
 *
 * A capsule is the Minkowski sum of a line segment and a sphere of
 * radius `r`, so capsule-vs-triangle reduces to:
 *
 *   1. Find the closest pair of points between the capsule's central
 *      segment and the triangle (segment ↔ triangle distance).
 *   2. If distance ≥ radius, no overlap.
 *   3. Otherwise emit a primary contact at the segment-triangle
 *      closest pair, then additionally treat each cap centre (segment
 *      endpoint) as a sphere of cap-radius and run
 *      {@link sphere_triangle_contact} to produce up to 2 endpoint
 *      contacts. Spatial dedup against the primary so a capsule
 *      touching with one cap doesn't emit two contacts at the same
 *      point.
 *
 * The multi-point manifold (1 primary + 2 endpoints) is what allows a
 * capsule resting flat on a triangle face to be stable — 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. The endpoint contacts pin the
 * capsule's rotation about its long axis.
 *
 * Output layout per contact (matches
 * {@link CAPSULE_BOX_CONTACT_STRIDE} so the same downstream wiring
 * works):
 *   0..2 : world contact on capsule side
 *   3..5 : world contact on triangle side
 *   6..8 : normal from triangle (B) toward capsule (A)
 *   9    : depth (positive = penetration)
 *
 * @author Alex Goldring
 * @copyright Company Named Limited (c) 2026
 */
/**
 * Output stride per contact.
 * @type {number}
 */
export const CAPSULE_TRIANGLE_CONTACT_STRIDE: number;
/**
 * Maximum contacts emitted: 1 primary + 2 endpoint sphere contacts.
 * @type {number}
 */
export const CAPSULE_TRIANGLE_MAX_CONTACTS: number;
//# sourceMappingURL=capsule_triangle_contact.d.ts.map