pub fn ccw(a: Point, b: Point, c: Point) -> isizeExpand description
3点 a, b, c の向きを外積で返します。
正なら反時計回り、負なら時計回り、0 なら一直線上です。計算量は O(1) です。
有向直線 a → b から見て c が左側なら正、右側なら負です。
戻り値は (b - a) × (c - a) そのもので、-1 / 0 / 1 に正規化しません。
絶対値は三角形 abc の面積の2倍です。0 だけでは c が線分上かは
分からないため、線分上の判定には on_segment を使ってください。
use atcoder::geometry::{ccw, Point};
let a = Point::new(0, 0);
let b = Point::new(2, 0);
assert_eq!(ccw(a, b, Point::new(1, 3)), 6); // 左側(上側)
assert_eq!(ccw(a, b, Point::new(1, -3)), -6); // 右側(下側)
assert_eq!(ccw(a, b, Point::new(3, 0)), 0); // 直線上だが線分外