求两个圆交叉区域面积

该博客介绍了如何使用Java来计算两个圆相交时的交集面积。根据圆心距与半径的关系,判断两圆相交情况,并分别处理相切和相交的情况。在相交的情况下,通过余弦定理计算扇形角度,利用海伦公式求解三角形面积,最终得出交集面积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:先判断两个圆是否相交,半径分别为R,r

  • 不相交(包括相切):两圆心距离d>=(R+r)
  • 相交1:两圆心距离d<=|R-r|,一个圆在另一个圆内,所求面积为小圆面积
  • 相交2:两圆心距离d>|R-r| && d<(R+r),所求面积为相交两扇形面积减去两三角形面积

  • 扇形所对应角度用余弦定理求出,三角形面积用海伦公式求出

  • x,y,r分别对应圆的横纵坐标,半径

public double Area(int x1,int y1,int r1,int x2,int y2,int r2){  
        double s,p,l,ans; 
        int temp;
        double pi = Math.PI;
        l=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));  
        if(l>=r1+r2) ans=0;  
        else if(l<=Math.abs(r1-r2)){  
            if(r1<=r2)       ans=pi*r1*r1;  
            else            ans=pi*r2*r2;  
        }  
        else{  
            p=(l+r1+r2)/2;  
            //海伦公式求三角形面积
            s=2*Math.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=Math.acos((r1*r1+l*l-r2*r2)/(2*r1*l))*r1*r1+Math.acos((r2*r2+l*l-r1*r1)/(2*r2*l))*r2*r2-s;  
        }  
        return ans;  
    }  

//控制输出格式
//DecimalFormat df = new DecimalFormat( "0.00000 ");  
//df.format(ans);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值