seg_seg v0.0.1 SegSeg

Summary

Functions

Calculates the type of relationship between two line segments AB and CD and the location of intersection (if applicable)

Functions

intersection(a, b, c, d)

Calculates the type of relationship between two line segments AB and CD and the location of intersection (if applicable).

Classification of segment-segment intersection

The function SegSeg.intersection calculates the intersection between two line segments and returns a tuple with three elements:

  1. Boolean true if the two segments intersect at all, false if they are disjoint
  2. An atom representing the classification of the intersection:
  • :interior - the segments intersect at a point that is interior to both
  • :vertex - the segments intersect at an endpoint of one or both segments
  • :edge - the segments are parallel, collinear, and overlap for some non-zero

        length
  • :disjoint - no intersection exists between the two segments
  1. A tuple {x, y} representing the point of intersection if the intersection is classified as :interior or :vertex, otherwise nil.

Examples

iex> SegSeg.intersection({2, -3}, {4, -1}, {2, -1}, {4, -3})
{true, :interior, {3.0, -2.0}}
iex> SegSeg.intersection({-1, 3}, {2, 4}, {-1, 4}, {-1, 5})
{false, :disjoint, nil}
iex> SegSeg.intersection({-1, 0}, {0, 2}, {0, 2}, {1, -1})
{true, :vertex, {0, 2}}
iex> SegSeg.intersection({-1, 0}, {0, 2}, {1, 4}, {-1, 0})
{true, :edge, nil}