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 {};