计算两圆相交部分的面积

相离,相切,相交,内含这几种情况都考虑了。

 1 struct Circle{
 2     double x, y, r;
 3 };
 4 //圆的圆心坐标,半径
 5 
 6 double dis(Circle a, Circle b){
 7     return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
 8 }
 9 //两圆圆心的距离
10 
11 double solve(Circle a, Circle b){
12     double d = dis(a, b);
13     if (d >= a.r + b.r) return 0;
14     if (d <= fabs(a.r - b.r)){
15         double r = a.r < b.r ? a.r : b.r;
16         return pi * r * r;
17     }
18 
19     double ang1 = acos((a.r * a.r + d * d - b.r * b.r) / 2.00 / a.r / d);
20     double ang2 = acos((b.r * b.r + d * d - a.r * a.r) / 2.00 / b.r / d);
21     double ret = ang1 * a.r * a.r + ang2 * b.r * b.r - d * a.r * sin(ang1);
22     return ret;
23 }
24 //返回值即为两圆公共部分的面积
原文地址:https://www.cnblogs.com/cxhscst2/p/6399571.html