Implementation of Bentley-Ottman algorithm for finding line segment intersections.
Project description
line-segment-intersections
An implementation of the Bentley-Ottman algorithm.
Requirements
numpy >= 1.19.0
Usage
To use the algorithm, you can import it using
from linesegmentintersections import bentley_ottman
segments = [[[0, 0], [4, 4]], [[1, 3], [3, 1]]]
intersections = bentley_ottman(segments)
This algorithm takes a list of pairs of (x, y) coordinates. It will output a list of Intersection objects, from which you can get the coordinates using
x_coordinate = intersections[0].x
y_coordinate = intersections[0].y
Important Assumptions
No endpoints lie on another segment. This implementation will work on most cases with colinear endpoints, but there are a few edge cases which will not work, such as 2 or more endpoints lying on a vertical segment. It will simply be missing intersections in the final output.
No 3 line segments intersect at the same location. This may cause the algorithm to report a fewer quantity of intersections than are truly there, but will still report the correct locations of intersections.
No segments share endpoints. This will cause the algorithm to throw an error.
Algorithm Details
We implemented the Bentley-Ottman algorithm, which uses a sweepline to add and remove line segments from a balanced tree data structure. Segments only check for intersections with other segments immediately above or below the given segment in the balanced tree. Upon reaching an intersection point, segments are switched in the tree. We keep track of the segment beginnings, ends, and intersections using a priority queue, which simulates our sweepline. For our balanced tree we implemented an AVL Tree.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file line-segment-intersections-0.1.3.tar.gz.
File metadata
- Download URL: line-segment-intersections-0.1.3.tar.gz
- Upload date:
- Size: 14.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.5.0.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
688a4de96e1c384962605dc18b54f5f873762713398d0c9d93a43e4650387f1e
|
|
| MD5 |
085a6428e404e01aa7ca6574c8a8bcaf
|
|
| BLAKE2b-256 |
eaed28d5946f6c114a7de39494e4fa88803ccfbc1298410da3c904ea6edd6223
|
File details
Details for the file line_segment_intersections-0.1.3-py3-none-any.whl.
File metadata
- Download URL: line_segment_intersections-0.1.3-py3-none-any.whl
- Upload date:
- Size: 21.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.5.0.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45ed0db5a288249795d1d1b60bc15f033ec9c2bcdd227e5072745b974be8f1f2
|
|
| MD5 |
8d533e188bcfb8c4f7d3783652577193
|
|
| BLAKE2b-256 |
0f57c549040600ae2f3f7443594269c197dac41c9955e20a41aa60323eb62a80
|