rgeometry/algorithms/intersection/
naive.rs1use crate::data::LineSegmentView;
2use crate::{Intersects, PolygonScalar};
3
4pub 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}