@technobuddha/library
Version:
A large library of useful functions
27 lines • 2.15 kB
JavaScript
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==