geo/algorithm/intersects/
triangle.rs1use super::Intersects;
2use crate::*;
3
4impl<T> Intersects<Coord<T>> for Triangle<T>
5where
6 T: GeoNum,
7{
8 fn intersects(&self, rhs: &Coord<T>) -> bool {
9 let mut orientations = self
10 .to_lines()
11 .map(|l| T::Ker::orient2d(l.start, l.end, *rhs));
12
13 orientations.sort();
14
15 !orientations
16 .windows(2)
17 .any(|win| win[0] != win[1] && win[1] != Orientation::Collinear)
18
19 }
40}
41
42symmetric_intersects_impl!(Triangle<T>, LineString<T>);
43symmetric_intersects_impl!(Triangle<T>, MultiLineString<T>);
44
45symmetric_intersects_impl!(Triangle<T>, Line<T>);
46
47symmetric_intersects_impl!(Triangle<T>, Point<T>);
48symmetric_intersects_impl!(Triangle<T>, MultiPoint<T>);
49
50symmetric_intersects_impl!(Triangle<T>, Polygon<T>);
51symmetric_intersects_impl!(Triangle<T>, MultiPolygon<T>);
52
53symmetric_intersects_impl!(Triangle<T>, Rect<T>);
54
55impl<T> Intersects<Triangle<T>> for Triangle<T>
56where
57 T: GeoNum,
58{
59 fn intersects(&self, rhs: &Triangle<T>) -> bool {
60 self.to_polygon().intersects(&rhs.to_polygon())
61 }
62}