UNPKG

@technobuddha/library

Version:
27 lines 2.15 kB
import { isOnLine } from "./is-on-line.js"; import { toClosed } from "./to-closed.js"; import { toLineSegment } from "./to-line-segment.js"; // Determines whether a point is located on one of the edges of a polygon. // Returns a boolean. /** * Determines whether a given point lies exactly on the boundary of a polygon. * @param point - The Cartesian coordinates of the point to test. * @param polygon - The polygon, represented as an array of Cartesian points. * @param tolerance - Optional tolerance for floating-point comparisons (default is 1e-10). * @returns `true` if the point lies on any edge of the polygon within the given tolerance, otherwise `false`. * @group Geometry * @category Point * @category Polygon */ export function isOnPolygon(point, polygon, tolerance = 1e-10) { let on = false; const closed = toClosed(polygon); for (let i = 0, l = closed.length - 1; i < l; i++) { if (isOnLine(point, toLineSegment(closed[i], closed[i + 1]), { tolerance })) { on = true; break; } } return on; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtb24tcG9seWdvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pcy1vbi1wb2x5Z29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELDBFQUEwRTtBQUMxRSxxQkFBcUI7QUFDckI7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFnQixFQUFFLE9BQWdCLEVBQUUsU0FBUyxHQUFHLEtBQUs7SUFDL0UsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2YsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRWpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbEQsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzVFLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDVixNQUFNO1FBQ1IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMifQ==