1 条题解

  • 0
    @ 2025-4-12 21:54:24

    C :

    #include<stdio.h>
    #include<math.h>
    #define PI acos(-1.0)
    int main()
    {
        double x1,y1,r1,x2,y2,r2,a1,a2,dis,area;
        while(scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&r1,&x2,&y2,&r2)!=EOF)
        {
            dis=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));//两圆心之间的距离
            if(r1+r2<=dis) //相离或相切
            {
                printf("0.000\n");
                continue;
            }
            if(fabs(r1-r2)>=dis)  //包含
            {
                printf("%.3lf\n",PI*(r1>r2?r2:r1)*(r1>r2?r2:r1));
                continue;
            }
            //相交的情况
            a1=(r1*r1+dis*dis-r2*r2)/(2*r1*dis);//余弦定理
            a2=(r2*r2+dis*dis-r1*r1)/(2*r2*dis);
            a1=2*acos(a1);
            a2=2*acos(a2);
            area=r1*r1*(a1-sin(a1))/2+ r2*r2 * (a2 - sin(a2))/2;
            printf("%.3lf\n",area);
        }
        return 0;
    }
    

    C++ :

    #include <stdio.h>
    #include <math.h>
    
    const double eps = 1e-8;
    const double pi = acos(-1);
    
    double x[2], y[2], r[2];
    
    double dis(double x1, double y1, double x2, double y2) {
    	return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    }
    
    double fusiform(double a, double c, double b) {
    	double angle = acos((a * a + b * b - c * c) / (2 * a * b)) * 2;
    	double s1 = a * a * pi * (angle / (2 * pi));
    	double s2 = a * a * sin(angle) / 2;
    	return s1 - s2;
    }
    
    double common(double x1, double y1, double r1, double x2, double y2, double r2) {
    	double d = dis(x1, y1, x2, y2);
    	if (d + eps >= r1 + r2)
    		return 0;
    	if (d - eps <= fabs(r1 - r2)) {
    		if (r1 > r2)
    			return pi * r2 * r2;
    		else
    			return pi * r1 * r1;
    	}
    	return fusiform(r1, r2, d) + fusiform(r2, r1, d);
    }
    
    int main() {
    	while (scanf("%lf%lf%lf%lf%lf%lf", &x[0], &y[0], &r[0], &x[1], &y[1], &r[1]) != EOF)
    		printf("%.3lf\n", common(x[0], y[0], r[0], x[1], y[1], r[1]));
    	return 0;
    }
    
    • 1

    信息

    ID
    2392
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者