Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rowanwins/kwc-lineclip
Line clipping based on the algorithm by Kodituwakka, Wijeweera & Chamikara
https://github.com/rowanwins/kwc-lineclip
algorithm clipping geometry
Last synced: 11 days ago
JSON representation
Line clipping based on the algorithm by Kodituwakka, Wijeweera & Chamikara
- Host: GitHub
- URL: https://github.com/rowanwins/kwc-lineclip
- Owner: rowanwins
- License: mit
- Created: 2018-01-22T23:09:51.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-03-12T21:52:35.000Z (over 6 years ago)
- Last Synced: 2024-10-22T22:32:17.195Z (16 days ago)
- Topics: algorithm, clipping, geometry
- Language: JavaScript
- Size: 218 KB
- Stars: 11
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## kwc-lineclip
A small javascript lib for clipping polylines by a bounding box.### Install
````
npm install kwc-lineclip
````### API
```js
lineclip(
[[-10, 10], [10, 10], [10, -10]], // polyline
[0, 0, 20, 20]); // bbox
// returns [[[0, 10], [10, 10], [10, 0]]]
```### Algorithm
This library is an implementation of the approach described in ['An Efficient Algorithm for Line Clipping in Computer Graphics Programming'](http://www.academia.edu/2491960/An_Efficient_Algorithm_for_Line_Clipping_in_Computer_Graphics_Programming) by Kodituwakka, Wijeweera & Chamikara. Some adjustments have been made to the algorithm in the paper to cater for lines with multiple segments.### Performance
I've checked the performance of this algorithm against implementations of the [Cohen-Sutherland](https://github.com/mapbox/lineclip) and a [Liang-barsky](https://github.com/w8r/liang-barsky) algorithms for clipping just one segment. Liang-barsky currently only supports a single segment clip.
````
SINGLE SEGMENT TEST
kwc x 9,542,273 ops/sec ±1.78% (100 runs sampled)
liang-barsky (non-destructive) x 17,583,416 ops/sec ±2.89% (99 runs sampled)
mapbox/lineclip x 7,022,569 ops/sec ±8.14% (95 runs sampled)
- Fastest is liang-barsky (non-destructive)MULTIPLE SEGMENT MULTIPLE OUTPUT TEST
kwc x 4,974,886 ops/sec ±6.84% (82 runs sampled)
mapbox/lineclip x 3,788,980 ops/sec ±0.70% (88 runs sampled)
- Fastest is kwcLONGER LINE
kwc x 800,189 ops/sec ±0.79% (93 runs sampled)
mapbox/lineclip x 704,052 ops/sec ±2.53% (88 runs sampled)
- Fastest is kwc
````kwc-lineclip was initially faster than liang-barsky until I amended the algorithm to support multiple segments.
Memory usage is also slightly less in with this module compared with `lineclip`.