UNPKG

@technobuddha/library

Version:
28 lines 2.55 kB
import { crossProduct } from "./cross-product.js"; import { lineLength } from "./line-length.js"; /** * Determines whether a given point lies on a specified line segment or its extension. * @param point - The Cartesian coordinates of the point to test. * @param line - The line segment defined by its endpoints. * @param options - see {@link OnLineOptions} * @returns `true` if the point lies on the line segment (or its extension if `extend` is true), otherwise `false`. * @example * ```typescript * isOnLine({ x: 2, y: 2 }, { x0: 0, y0: 0, x1: 4, y1: 4 }); // true * ``` * @group Geometry * @category Line Segment * @category Point */ export function isOnLine(point, line, { tolerance = 1e-10, extend = false } = {}) { const isOnExtendedLine = Math.abs(crossProduct(point, { x: line.x0, y: line.y0 }, { x: line.x1, y: line.y1 })) < tolerance; if (extend) { return isOnExtendedLine; } const len = lineLength(line); return (isOnExtendedLine && lineLength({ x0: line.x0, y0: line.y0, x1: point.x, y1: point.y }) <= len && lineLength({ x0: line.x1, y0: line.y1, x1: point.x, y1: point.y }) <= len); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtb24tbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pcy1vbi1saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFvQjlDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUN0QixLQUFnQixFQUNoQixJQUFpQixFQUNqQixFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsTUFBTSxHQUFHLEtBQUssS0FBb0IsRUFBRTtJQUV6RCxNQUFNLGdCQUFnQixHQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLFNBQVMsQ0FBQztJQUVaLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsT0FBTyxDQUNMLGdCQUFnQjtRQUNoQixVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRztRQUN6RSxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxDQUMxRSxDQUFDO0FBQ0osQ0FBQyJ9