ncollide3d/utils/
point_in_poly2d.rs
1use na::{Point2, RealField};
2
3pub fn point_in_poly2d<N: RealField + Copy>(pt: &Point2<N>, poly: &[Point2<N>]) -> bool {
6 if poly.len() == 0 {
7 false
8 } else {
9 let mut sign = N::zero();
10
11 for i1 in 0..poly.len() {
12 let i2 = (i1 + 1) % poly.len();
13 let seg_dir = poly[i2] - poly[i1];
14 let dpt = pt - poly[i1];
15 let perp = dpt.perp(&seg_dir);
16
17 if sign.is_zero() {
18 sign = perp;
19 } else if sign * perp < N::zero() {
20 return false;
21 }
22 }
23
24 return true;
25 }
26}