haar_lib/geom/
area_intersection_circles.rs1use crate::geom::{intersect_circles::*, *};
4use std::f64::consts::PI;
5
6pub fn area_intersection_circles(a: Circle, b: Circle, eps: Eps) -> f64 {
8 use self::IntersectCircles::*;
9 let (s, _) = intersect_circles(a, b, eps);
10
11 match s {
12 SAME => a.radius * a.radius * PI,
13 INSIDE | INSCRIBED => {
14 let a_s = a.radius * a.radius * PI;
15 let b_s = b.radius * b.radius * PI;
16 a_s.min(b_s)
17 }
18 INTERSECTED => {
19 let d = (a.center - b.center).abs();
20
21 let ang =
22 ((a.radius * a.radius + d * d - b.radius * b.radius) / (a.radius * d * 2.0)).acos();
23 let t1 = (ang - (ang * 2.0).sin() / 2.0) * a.radius * a.radius;
24
25 let ang =
26 ((b.radius * b.radius + d * d - a.radius * a.radius) / (b.radius * d * 2.0)).acos();
27 let t2 = (ang - (ang * 2.0).sin() / 2.0) * b.radius * b.radius;
28
29 t1 + t2
30 }
31 _ => 0.0,
32 }
33}