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.2.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.2-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: line-segment-intersections-0.1.2.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.2.tar.gz
Algorithm Hash digest
SHA256 c21684a26261123ea800145e6371bea0b2d021d8be08faeebb4a71aa383048f6
MD5 506b35f24f2449f1db08f6b6d90eb4a5
BLAKE2b-256 1d60b3e80cfa45d1a6d8f4d005ed32e86a86dfa07f4d98825705a047eff1ed17

See more details on using hashes here.

File details

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

File metadata

  • Download URL: line_segment_intersections-0.1.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f0fc7cd4049914f85fc632972baf29b62050b8c78e461c3528f89c1674ea93bf
MD5 99b6f37b34cf6cfbd54b9c40688ec41d
BLAKE2b-256 02553f24d3438c0c5d992680921fddcc4e5eee1e13d76fd78bc722c162d6175b

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