您的位置:首页 > 其它

计算两个圆相交部分的面积

2014-11-17 21:42 1726 查看
以下是直接封装好的函数,六个参数,意思分别是第一个圆的圆心,半径,第二个圆的圆心,半径,返回相交部分的面积,如果不相交,则返回零。

编程的时候直接复制粘贴调用就行了,至于原理,就是两个扇形的面积减去四边形的面积。但是四边形不一定是凸四边形,所以我用到了凯伦公式,直接求面积,管它凸的还是凹的!扇形的圆心角不一定总是锐角,所以用到了余弦定理,管它是正的还是负的。

double intersect(double x1,double y1,double r1,double x2,double y2,double r2){
double s,temp,p,l,ans;
l=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
if(l>=r1+r2)	ans=0;
else if(l<=abs(r1-r2)){
if(r1<=r2)	    ans=pi*r1*r1;
else			ans=pi*r2*r2;
}
else{
p=(l+r1+r2)/2;
s=2*sqrt(p*(p-l)*(p-r1)*(p-r2));
if(r1>r2){
temp=x1;x1=x2;x2=temp;
temp=y1;y1=y2;y2=temp;
temp=r1;r1=r2;r2=temp;
}
ans=acos((r1*r1+l*l-r2*r2)/(2*r1*l))*r1*r1+acos((r2*r2+l*l-r1*r1)/(2*r2*l))*r2*r2-s;
}
return ans;
}

//六个参数,意思分别是第一个圆的圆心,半径,第二个圆的圆心,半径,返回相交部分的面积,如果不相交,则返回零。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐