首页 > 其他 > 详细

模板:计算两圆相交部分的面积

时间:2017-02-15 00:15:40      阅读:228      评论:0      收藏:0      [点我收藏+]

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

 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 //返回值即为两圆公共部分的面积

 

模板:计算两圆相交部分的面积

原文:http://www.cnblogs.com/cxhscst2/p/6399571.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!