haar_lib/geom/convex.rs
1//! 凸多角形の判定
2
3use crate::geom::{ccw::*, *};
4
5/// 多角形`ps`が凸多角形であれば`true`を返す。
6pub fn is_convex(ps: &[Vector], eps: Eps) -> bool {
7 let n = ps.len();
8 let mut temp = None;
9
10 for i in 0..n {
11 let c = ccw(ps[i], ps[(i + 1) % n], ps[(i + 2) % n], eps);
12
13 if c == CCW::CLOCKWISE || c == CCW::COUNTER_CLOCKWISE {
14 match temp {
15 Some(x) if x != c => return false,
16 None => temp = Some(c),
17 _ => {}
18 }
19 }
20 }
21
22 true
23}