两圆相交面积计算

double overlap_area(double x1,double y1,double r1,double x2,double y2,double r2){  
    double d = sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );  
    double angle1,angle2,h1,h2,s1,s2;  
    if( d >= r1+r2 )  
        return 0;  
    if( d <= fabs(r1-r2) )  
        return min( acos(-1.0)*r1*r1 , acos(-1.0)*r2*r2 );  
    angle1 = acos( (d*d+r1*r1-r2*r2) / (2*d*r1) );  
    angle2 = acos( (d*d+r2*r2-r1*r1) / (2*d*r2) );  
    h1 = angle1 * r1 * r1;  
    h2 = angle2 * r2 * r2;  
    s1 = r1 * r1 * cos(angle1) * sin(angle1);  
    s2 = r2 * r2 * cos(angle2) * sin(angle2);  
    return h1 + h2 - (s1+s2);  
}  

拓展:两圆环相交面积(两圆环相同)

S = S1(大圆相交面积) + S3(小圆相交面积) - 2 * S2(大小圆相交面积)

两圆环相交面积(两圆环不同,O1O2

S = S1(两大圆相交面积) - S2(O1小圆与O2大圆相交面积) - S3(O1大圆与O2小圆相交面积) + S4(小圆相交面积)



版权声明:本文为hdweilao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。