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