seg_seg v0.1.0 SegSeg
Calculates the type of relationship between two line segments AB and CD and the location of intersection (if applicable).
Summary
Functions
Returns a tuple representing the segment-segment intersectoin with three elements
Functions
Returns a tuple representing the segment-segment intersectoin with three elements:
- Boolean
true
if the two segments intersect at all,false
if they are disjoint - 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
- A tuple
{x, y}
representing the point of intersection if the intersection is classified as:interior
or:vertex
, otherwisenil
.
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}