An open API service indexing awesome lists of open source software.

https://github.com/w8r/segment-intersection

Simple two segment intersection
https://github.com/w8r/segment-intersection

geometry segment-intersection

Last synced: 8 months ago
JSON representation

Simple two segment intersection

Awesome Lists containing this project

README

          

# `segment-intersection` ![checks](https://img.shields.io/github/checks-status/w8r/segment-intersection/main) ![npm](https://img.shields.io/npm/v/segment-intersection)

![Screenshot](playground/screenshot.png)

Fast segment 2D intersection, that includes edge cases, such as segments touching points, or one segment being on top of the other.

## API

```ts
import { intersection, findIntersection } from 'segment-intersection';

const isect = findIntersection(x0, y0, x1, y1, x2, y2, x3, y3);
console.log(isect); // 0, 1 or 2
console.log(intersection); // [[x, y], [x, y]]
```

- `isect === 0` means the segments do not intersect.
- `isect === 1` your intersection point is `intersection[0]`.
- `isect === 2` your segments are overlapping and you have 2 intersection points, `intersection[0]` and `intersection[1]`.

Also, you can write into an existing array:

```ts
import { findIntersection } from 'segment-intersection';
const intersection = [
[0, 0],
[0, 0],
];
const isect = findIntersection(x0, y0, x1, y1, x2, y2, x3, y3, intersection);
```

### Benchmark

```
- segment-intersection x 12,139,495 ops/sec ±0.81% (88 runs sampled)
- exact-segment-intersect x 1,149,191 ops/sec ±2.38% (89 runs sampled)
- segseg x 5,492,533 ops/sec ±4.01% (86 runs sampled)
```

### Run Playground

```bash
npm run dev
```

### Build Playground (preview)

```bash
npm run demo
```

### Build Library

```bash
npm run build
```

### Lint

```bash
npm run lint
```

### Test

```bash
npm run test
```

### Test + Watch

```bash
npm run test:watch
```

### Test + Coverage

```bash
npm run coverage
```

## License

[MIT License](./LICENSE)

Copyright (c) Alex Milevski ([@w8r](https://github.com/w8r))