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.3.tar.gz (14.7 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.3-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

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

Hashes for line-segment-intersections-0.1.3.tar.gz
Algorithm Hash digest
SHA256 688a4de96e1c384962605dc18b54f5f873762713398d0c9d93a43e4650387f1e
MD5 085a6428e404e01aa7ca6574c8a8bcaf
BLAKE2b-256 eaed28d5946f6c114a7de39494e4fa88803ccfbc1298410da3c904ea6edd6223

See more details on using hashes here.

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

Hashes for line_segment_intersections-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 45ed0db5a288249795d1d1b60bc15f033ec9c2bcdd227e5072745b974be8f1f2
MD5 8d533e188bcfb8c4f7d3783652577193
BLAKE2b-256 0f57c549040600ae2f3f7443594269c197dac41c9955e20a41aa60323eb62a80

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