Skip to main content

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

line-segment-intersections-0.1.1.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

line_segment_intersections-0.1.1-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file line-segment-intersections-0.1.1.tar.gz.

File metadata

  • Download URL: line-segment-intersections-0.1.1.tar.gz
  • Upload date:
  • Size: 15.1 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

Hashes for line-segment-intersections-0.1.1.tar.gz
Algorithm Hash digest
SHA256 97c4f86550c49cdc42dcf03ee26483a0b7356bdc216e257d2ce764295308e373
MD5 937a97e4fd0277eaf931df07084f08b1
BLAKE2b-256 765034e755e77ea1bca0c29e8127b49b11c53d7d4d64453d9442e5de61da266a

See more details on using hashes here.

File details

Details for the file line_segment_intersections-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: line_segment_intersections-0.1.1-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

Hashes for line_segment_intersections-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 031f390d89af32bf8d9a9a0e2e2dabb36ca100eab7307923e184c5b990465dc5
MD5 19d77af9077ca6fbf55863ea49e8cbc0
BLAKE2b-256 be77ae0fce1b401ef535c16b76e073db19074a1f9b7ddfc83b42d182be8d8b97

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page