This repository contains a collection of TypeScript utility functions for geometric calculations, primarily focused on line intersection and distance calculations.
npm install @tscircuit/math-utilsThis repository contains a collection of TypeScript utility functions for geometric calculations, primarily focused on line intersection and distance calculations.
- Line intersection detection
- Segment intersection detection
- Segment-rectangle intersection detection
- Point-to-segment distance calculation
- Orientation of points
- Distance between points
- Bounds overlap and distance calculations
``bash`
bun add @tscircuit/math-utils
Import the functions you need in your TypeScript project:
`typescript
import {
doesLineIntersectLine,
doSegmentsIntersect,
pointToSegmentDistance,
} from "./src/index"
// Example usage
const point1 = { x: 0, y: 0 }
const point2 = { x: 5, y: 5 }
const point3 = { x: 0, y: 5 }
const point4 = { x: 5, y: 0 }
const intersects = doesLineIntersectLine([point1, point2], [point3, point4])
console.log("Lines intersect:", intersects)
`
| Function | Description |
| -------- | ----------- |
| doesLineIntersectLine(line1, line2, options?) | Determine if two lines intersect, optionally considering line thickness. |
| doSegmentsIntersect(p1, q1, p2, q2) | Check if two line segments intersect. |
| doesSegmentIntersectRect(a, b, rect) | Check if a segment intersects an axis-aligned rectangle. |
| orientation(p, q, r) | Calculate the orientation of three points. |
| onSegment(p, q, r) | Determine if point q lies on the segment p–r. |pointToSegmentDistance(p, v, w)
| | Minimum distance between a point and a segment. |distance(p1, p2)
| | Euclidean distance between two points. |getSegmentIntersection(a, b, u, v)
| | Intersection point of two segments or null if none. |getBoundingBox(box)
| | Compute the bounding box of a box. |computeManhattanDistanceBetweenBoxes(boxA, boxB)
| | Minimum Manhattan distance between two boxes and the nearest points. |clamp(value, min, max)
| | Clamp a value between min and max. |findNearestPointsBetweenBoxSets(setA, setB)
| | Find nearest points between two sets of boxes. |getUnitVectorFromPointAToB(a, b)
| | Unit vector pointing from point A to B. |getUnitVectorFromDirection(direction)
| | Unit vector for the given cardinal direction. |grid(options)
| | Generate grid cell positions with spacing and offsets. |segmentToSegmentMinDistance(a, b, u, v)
| | Minimum distance between two line segments. |segmentToBoundsMinDistance(a, b, bounds)
| | Minimum distance from a segment to a bounds rectangle. |segmentToBoxMinDistance(a, b, box)
| | Minimum distance from a segment to a box. |segmentToCircleMinDistance(a, b, circle)
| | Minimum distance from a segment to a circle. |pointToSegmentClosestPoint(p, a, b)
| | Closest point on a segment to the given point. |pointToBoxDistance(p, box)
| | Minimum distance from a point to a box. |pointToBoundsDistance(p, bounds)
| | Minimum distance from a point to a bounds rectangle. |midpoint(p1, p2)
| | Midpoint between two points. |distSq(p1, p2)
| | Squared distance between two points. |range(start, end?, step?)
| | Create an array of numbers progressing from start up to, but not including, end. |doBoundsOverlap(bounds1, bounds2)
| | Determine if two bounding rectangles overlap. |boundsAreaOverlap(bounds1, bounds2)
| | Area of overlap between two bounding rectangles. |boundsDistance(bounds1, bounds2)
| | Minimum distance between two bounding rectangles. |isPointInsidePolygon(point, polygon)
| | Determine if a point lies inside a polygon. |areBoundsOverlappingPolygon(bounds, polygon)
| | Check whether bounds intersect or are contained by a polygon. |areBoundsCompletelyInsidePolygon(bounds, polygon)
| | Determine if bounds are fully contained within a polygon. |isRectOverlappingPolygon(rect, polygon)
| | Check whether a rectangle defined by a center point with dimensions or by bounds overlaps a polygon. |isRectCompletelyInsidePolygon(rect, polygon)
| | Determine if a rectangle defined by a center point with dimensions or by bounds is fully contained within a polygon. |
rect objects passed to these helpers can either specify a center along with width and height or provide Bounds` directly.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.