题目描述
给你两个圆的圆心坐标和半径,请判断一下两个圆是下列哪种情况:
- 包含:一个圆在另外一个圆内,两圆无交点
- 内切:一个圆在另外一个圆内,一个交点
- 相交:两个圆交于两点
- 外切:两个圆交于1点,且圆没有嵌套
- 相离:圆没有嵌套且没有交点
输入
第一行是一个整数T(1≤T≤1000),表示样例的个数。
每个样例是两行,每行三个整数,x,y,r(1≤x,y,r≤1000),分别表示一个圆的圆心坐标和半径
输出
依次每行输出一个样例的结果,如果包含输出1,内切输出2,相交输出3,,外切输出4,想离输出5。
样例输入
5 0 0 2 0 0 1 0 0 2 1 0 1 0 0 2 1 0 2 0 0 2 3 0 1 0 0 2 4 0 1
样例输出
1 2 3 4 5
这题只要知道圆与圆的几种位置关系就比较容易解出来,假设两个圆的半径为R和r,圆心距为d,则:
包含:d<|R-r|,外离:d>R+r,外切:d=R+r,相交:|R-r<|d<R+r,内切:d=|R-r|
#include<stdio.h>
#include<math.h>
int main()
{
int t,s,j,max,min;
double x1,y1,r1,x2,y2,r2,d;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf",&x1,&y1,&r1);
scanf("%lf%lf%lf",&x2,&y2,&r2);
s = r1 + r2;//半径和
j = fabs(r1 - r2);//半径差的绝对值
d = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));//圆心距
if(d < j)
printf("1\n");
else if(d == j)
printf("2\n");
else if(d < s&&d > j)
printf("3\n");
else if(d == s)
printf("4\n");
else
printf("5\n");
}
return 0;
}