/**
 * Minkowski Portal Refinement (XenoCollide, Gary Snethen, GDC 2009).
 *
 * Determines whether two convex shapes overlap and, if so, returns the
 * Minimum Translation Vector (MTV) that would separate them. The
 * algorithm runs in two phases:
 *
 *   1. **Portal discovery.** Starting from an interior point V0 of the
 *      Minkowski difference (the difference of the two body centres),
 *      find three vertices V1, V2, V3 on the Mink-diff boundary that
 *      form a triangle the ray V0→origin pierces. If at any point a
 *      support hyperplane separates V0 from the origin, the shapes
 *      can't overlap and we return false.
 *
 *   2. **Portal refinement.** Iteratively replace one of V1, V2, V3
 *      with a new support V4 found in the direction of the portal
 *      face's outward normal. When V4 doesn't bring the portal any
 *      closer to the origin (within `MPR_TOLERANCE`), the portal face
 *      *is* the closest face on the Mink-diff to the origin; its
 *      outward normal is the MTV direction and the perpendicular
 *      distance from the origin to the face is the penetration depth.
 *
 * Compared to GJK+EPA on the same overlap:
 *   - One algorithm produces both the overlap test and the MTV (EPA is
 *     a separate pass after GJK).
 *   - Better behaviour on smooth or high-vertex-count shapes — EPA's
 *     polytope-expansion can stall on curved surfaces because each new
 *     support produces a face with no flat region to converge on; MPR's
 *     portal stays a single triangle and just slides toward the origin.
 *   - Tends to converge in 5–15 iterations on typical inputs vs. EPA's
 *     32+ on smooth pairs.
 *
 * **Output convention matches the EPA penetration query** ({@link gjk_epa_penetration}'s MTV form):
 *   `result[result_offset .. result_offset+2]` is the MTV vector —
 *   direction is "from A's surface into B" (i.e. the direction you'd
 *   translate B by to separate the shapes), magnitude is the depth.
 *   The caller reads depth as `√(x² + y² + z²)` and normalises to get
 *   the unit normal. This makes MPR a drop-in replacement for EPA at
 *   any narrowphase call site.
 *
 * On failure modes:
 *   - Returns `false` if the shapes don't overlap.
 *   - On a degenerate Mink-diff (shapes touching at a point, perfectly
 *     coincident centres with collinear support points), returns
 *     `true` with a small fallback MTV — same approach as EPA's
 *     non-convergent fallback. The narrowphase consumer already
 *     filters non-positive / non-finite depths.
 *
 * @param {Float64Array} result        destination buffer for the MTV vector
 * @param {number} result_offset
 * @param {PosedShape} shape_a
 * @param {PosedShape} shape_b
 * @returns {boolean} true on overlap
 */
export function mpr(result: Float64Array, result_offset: number, shape_a: PosedShape, shape_b: PosedShape): boolean;
//# sourceMappingURL=mpr.d.ts.map