123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import { Point, Polygon, GeometricShape } from "./geometry/shape";
- import {
- pointInEllipse,
- pointInPolygon,
- pointOnCurve,
- pointOnEllipse,
- pointOnLine,
- pointOnPolycurve,
- pointOnPolygon,
- pointOnPolyline,
- close,
- } from "./geometry/geometry";
- // check if the given point is considered on the given shape's border
- export const isPointOnShape = (
- point: Point,
- shape: GeometricShape,
- tolerance = 0,
- ) => {
- // get the distance from the given point to the given element
- // check if the distance is within the given epsilon range
- switch (shape.type) {
- case "polygon":
- return pointOnPolygon(point, shape.data, tolerance);
- case "ellipse":
- return pointOnEllipse(point, shape.data, tolerance);
- case "line":
- return pointOnLine(point, shape.data, tolerance);
- case "polyline":
- return pointOnPolyline(point, shape.data, tolerance);
- case "curve":
- return pointOnCurve(point, shape.data, tolerance);
- case "polycurve":
- return pointOnPolycurve(point, shape.data, tolerance);
- default:
- throw Error(`shape ${shape} is not implemented`);
- }
- };
- // check if the given point is considered inside the element's border
- export const isPointInShape = (point: Point, shape: GeometricShape) => {
- switch (shape.type) {
- case "polygon":
- return pointInPolygon(point, shape.data);
- case "line":
- return false;
- case "curve":
- return false;
- case "ellipse":
- return pointInEllipse(point, shape.data);
- case "polyline": {
- const polygon = close(shape.data.flat()) as Polygon;
- return pointInPolygon(point, polygon);
- }
- case "polycurve": {
- return false;
- }
- default:
- throw Error(`shape ${shape} is not implemented`);
- }
- };
- // check if the given element is in the given bounds
- export const isPointInBounds = (point: Point, bounds: Polygon) => {
- return pointInPolygon(point, bounds);
- };
|