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}