import { vec } from "mafs";
import * as React from "react";
import type { SnapTo } from "../../types";
import type { CollinearTuple } from "@khanacademy/perseus-core";
import type { Interval } from "mafs";
interface PolygonAngleProps {
    centerPoint: vec.Vector2;
    endPoints: [vec.Vector2, vec.Vector2];
    areEndPointsClockwise: boolean;
    showAngles: boolean;
    snapTo: SnapTo;
}
export declare const PolygonAngle: ({ centerPoint, endPoints, showAngles, snapTo, areEndPointsClockwise, }: PolygonAngleProps) => React.JSX.Element | null;
interface AngleProps {
    vertex: vec.Vector2;
    coords: [vec.Vector2, vec.Vector2];
    showAngles: boolean;
    allowReflexAngles: boolean;
    snapDegrees: number;
    range: [Interval, Interval];
}
export declare const Angle: ({ vertex, coords, showAngles, allowReflexAngles, range, }: AngleProps) => React.JSX.Element;
/**
 * Determines if an angle is an inside (false) or outside (true) angle.
 * They way, we know to flip the `largeArc` and `sweepArc` flags.
 * Uses the priciple that a ray from a point inside a polygon will intersect
 * with an odd number of lines, while a ray from a point outside the polygon
 * will intersect with an even number of lines.
 * https://stackoverflow.com/questions/217578/how-can-i-determine-whether-a-2d-point-is-within-a-polygon
 */
export declare const shouldDrawArcOutside: (midpoint: vec.Vector2, vertex: vec.Vector2, range: [Interval, Interval], polygonLines: readonly CollinearTuple[]) => boolean;
/**
 * Determines if an angle is an convex (false) or concave (true) angle.
 * Uses the cross product to determine if the angle is outside the polygon.
 * If the cross product is positive for a clockwise angle, the angle is concave.
 * NOTE: This always has to take in clockwise endpoints. It cannot determine
 * if the endpoints are clockwise itself - this has to be checked by the
 * caller. This is because of edge cases involving concave polygons.
 */
export declare function isConcavePolygonVertex(centerPoint: vec.Vector2, clockwiseEndpoints: [vec.Vector2, vec.Vector2]): boolean;
export {};
