export interface Vector2Like { readonly x: number; readonly y: number; } /** The number of vertices in a triangle. */ export declare const TRIANGLE_VERTEX_COUNT = 3; /** * Precomputed triangle data for efficient operations. */ export interface TriangleCache { /** A vertex of the triangle. */ readonly origin: Vector2Like; /** The circumcenter of the triangle. */ readonly circumcenter: Vector2Like; /** The squared circumradius of the triangle. */ readonly circumradiusSquared: number; /** Vector from vertex A to vertex B. */ readonly u: Vector2Like; /** Vector from vertex A to vertex C. */ readonly v: Vector2Like; /** Pseudo dot product of u with itself (u·u). */ readonly d00: number; /** Pseudo dot product of u with v (u·v). */ readonly d01: number; /** Pseudo dot product of v with itself (v·v). */ readonly d11: number; /** Inverse of the determinant used in barycentric calculations. */ readonly invDenom: number; /** Minimum bounds of the triangle's axis-aligned bounding box. */ readonly min: Vector2Like; /** Maximum bounds of the triangle's axis-aligned bounding box. */ readonly max: Vector2Like; } /** * Precomputes triangle data for efficient operations. * Calculates circumcenter, bounding box, and barycentric coordinate helpers. * * @param a - First vertex of the triangle * @param b - Second vertex of the triangle * @param c - Third vertex of the triangle * @returns Precomputed triangle data cache * @throws {Error} When triangle is degenerate or coordinates are invalid */ export declare function precomputeTriangle(a: Vector2Like, b: Vector2Like, c: Vector2Like): TriangleCache; /** * Calculates barycentric coordinates for a point relative to a triangle. * Returns undefined if the point lies outside the triangle. * * @param point - The point to calculate barycentric coordinates for * @param cache - Precomputed triangle data * @returns Barycentric weights {aW, bW, cW} if point is inside triangle, undefined otherwise * @throws {Error} When point coordinates or cache data are invalid */ export declare function calculateBarycentricWeights(point: Vector2Like, cache: { origin: Vector2Like; u: Vector2Like; v: Vector2Like; d00: number; d01: number; d11: number; invDenom: number; min: Vector2Like; max: Vector2Like; }): { aW: number; bW: number; cW: number; } | undefined; /** * Calculates the centroid (geometric center) of a triangle. * * @param a - First vertex of the triangle * @param b - Second vertex of the triangle * @param c - Third vertex of the triangle * @returns The centroid point of the triangle * @throws {Error} When any coordinate value is invalid */ export declare function calculateTriangleCentroid(a: Vector2Like, b: Vector2Like, c: Vector2Like): Vector2Like; /** * Determines if a point is strictly inside a circle (excluding the boundary). * Uses squared distance comparison to avoid square root operations. * * @param origin - The center point of the circle * @param radiusSquared - The squared radius of the circle * @param point - The point to test * @returns True if the point is strictly inside the circle, false otherwise * @throws {Error} When coordinates are invalid or radius is not positive */ export declare function isPointInsideCircle(origin: Vector2Like, radiusSquared: number, point: Vector2Like): boolean; /** * Normalizes an azimuth angle to the range [0, 2π). * * @param azimuth - The azimuth angle in radians * @returns The normalized azimuth in the range [0, 2π) radians * @throws {Error} When the azimuth value is not a valid number */ export declare function calculateNormalizedAzimuth(azimuth: number): number; /** * Calculates the forward angular distance between two azimuth angles. * Always measures distance in the positive direction. * * @param from - The starting azimuth angle in radians (normalized to [0, 2π)) * @param to - The target azimuth angle in radians (normalized to [0, 2π)) * @returns The forward angular distance in radians [0, 2π) * @throws {Error} When either azimuth value is invalid */ export declare function calculateAngularDistanceForward(from: number, to: number): number; /** * Determines if an azimuth angle falls within a specified angular range. * Handles ranges that wrap around the 0/2π boundary. * * @param value - The azimuth angle to test in radians (normalized to [0, 2π)) * @param from - The start of the angular range in radians (normalized to [0, 2π)) * @param to - The end of the angular range in radians (normalized to [0, 2π)) * @returns True if the azimuth is within the range (inclusive), false otherwise * @throws {Error} When any azimuth value is invalid */ export declare function isAzimuthBetween(value: number, from: number, to: number): boolean; /** * Calculates the squared Euclidean distance between two points. * Uses squared distance to avoid square root operation. * * @param x1 - X coordinate of the first point * @param y1 - Y coordinate of the first point * @param x2 - X coordinate of the second point * @param y2 - Y coordinate of the second point * @returns The squared distance between the two points * @throws {Error} When any coordinate value is invalid */ export declare function calculateDistanceSquared(x1: number, y1: number, x2: number, y2: number): number; /** * Calculates the squared distance from a point to a line segment. * Projects the point onto the line segment and clamps to segment boundaries. * * @param edge - A tuple containing the two endpoints of the edge * @param x - X coordinate of the point * @param y - Y coordinate of the point * @returns The squared distance from the point to the closest point on the edge * @throws {Error} When any coordinate value is invalid */ export declare function calculateDistanceToEdgeSquared([p1, p2]: [Vector2Like, Vector2Like], x: number, y: number): number;