haar_lib/geom/
dist_segments.rs

1//! 2つの線分間の距離
2
3use crate::{
4    geom::{dist_segment_point::*, *},
5    min,
6};
7
8/// 2つの線分間の距離を求める
9pub fn dist_segments(l1: Line, l2: Line) -> f64 {
10    let cr = l1.cross(l2);
11    let t1 = (l2.from - l1.from).cross(l2.diff()) / cr;
12    let t2 = (l2.from - l1.from).cross(l1.diff()) / cr;
13
14    if cr == 0.0 || !(0.0..1.0).contains(&t1) || !(0.0..1.0).contains(&t2) {
15        min! {
16            dist_segment_point(l1, l2.from),
17            dist_segment_point(l1, l2.to),
18            dist_segment_point(l2, l1.from),
19            dist_segment_point(l2, l1.to)
20        }
21    } else {
22        0.0
23    }
24}