View Code of Problem 106

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main()
{
    double x1,y1,x2,y2,r;
    double dis;
    while(scanf("%lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&r)!=EOF){
        dis=sqrt(pow(y2-y1,2)+pow(x2-x1,2));
        if(dis==2*r){
            printf("相切\n");
        }else if(dis>2*r){
            printf("相离\n");
        }else{
            if(dis==0){
                printf("重合\n");
            }else{
                double ang1=acos((r*r+dis*dis-r*r)/(2*r*dis));
                double ang2=acos((r*r+dis*dis-r*r)/(2*r*dis));
                double area=ang1*r*r + ang2*r*r - r*dis*sin(ang1);
                printf("相交 %.2lf\n",area);
            }
        }
    }
    return 0;
}

Double click to view unformatted code.


Back to problem 106