Segment-Segment Intersection for Elixir
Calculates intersection type and location for two line segments.
Installation
defp deps do
[{:seg_seg, "~> 0.1.0"}]
endUsage
The SegSeg module provides a function intersection that calculates the
intersection between two line segments and returns a tuple with three elements:
- Boolean
trueif the two segments intersect at all,falseif 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:interioror:vertex, otherwisenil.
Examples
SegSeg.intersection({2, -3}, {4, -1}, {2, -1}, {4, -3}) #=> {true, :interior, {3.0, -2.0}}
SegSeg.intersection({-1, 3}, {2, 4}, {-1, 4}, {-1, 5}) #=> {false, :disjoint, nil}
SegSeg.intersection({1, 2}, {3, 0}, {2, 1}, {4, 2}) #=> {true, :vertex, {2, 1}}
SegSeg.intersection({-1, 0}, {0, 2}, {1, 4}, {-1, 0}) #=> {true, :edge, nil}Tests
> mix test