rgeometry/algorithms/intersection/
naive.rs

1use crate::data::LineSegmentView;
2use crate::{Intersects, PolygonScalar};
3
4/// Find all line segment intersections.
5///
6/// # Time complexity
7/// $O(n^2)$
8pub fn segment_intersections<'a, Edge, T: PolygonScalar + 'a>(
9  edges: &'a [Edge],
10) -> impl Iterator<Item = (&'a Edge, &'a Edge)>
11where
12  &'a Edge: Into<LineSegmentView<'a, T, 2>>,
13{
14  pairs(edges).filter_map(|(a, b)| {
15    let a_edge: LineSegmentView<'a, T, 2> = a.into();
16    let b_edge: LineSegmentView<'a, T, 2> = b.into();
17    let _isect = Intersects::intersect(a_edge, b_edge)?;
18    Some((a, b))
19  })
20}
21
22fn pairs<E>(slice: &[E]) -> impl Iterator<Item = (&E, &E)> {
23  let n = slice.len();
24  (0..n).flat_map(move |a| (0..a).map(move |b| (&slice[a], &slice[b])))
25}