题目如下:
圆之间的的状态有以上5种,要是还有其他的状态,希望各位告知;
思路如下:
通过判断圆心之间的距离和两圆的半径之间的关系来判断是哪种情况;
先定义3种距离和半径和的关系,大于,等于,小于分别对应着相离,外切,(相交,相切,包含)
由于小于时有3中关系,所以,我们再次进行判断:
距离大于两圆半径的的是相交,等于半径差的是相切,大于最小的半径却小于最大的半径的距离就是包含。(方法可能不唯一,欢迎大家提出)
我设置了五组数据用来测试,分别对应着五种情况:
相离:
0,0,1
3,0,1
包含:
0,0,5
3,0,1
相交
0,0,3
3,0,1
外切
0,0,2
3,0,1
相切
0,0,4
3,0,1
代码如下所示:
import java.util.Scanner;
public class coutCircle {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("输入第一个圆的x,y,r(用空格隔开)");
int x1=sc.nextInt(),y1=sc.nextInt(),r1=sc.nextInt();
ddy_circle a=new ddy_circle(x1, y1, r1);
System.out.println("输入第二个圆的x,y,r(用空格隔开)");
x1=sc.nextInt();y1=sc.nextInt();r1=sc.nextInt();
ddy_circle b=new ddy_circle(x1, y1, r1);
double distance=Math.pow(Math.pow(Math.abs(a.x-b.x), 2)+Math.pow(Math.abs(a.y-a.y), 2),0.5);
double longs=a.r+b.r;
if(distance>longs){
System.out.println("相离");
}else if(distance<longs){
if(distance>min(a.r,b.r)&&distance<max(a.r,b.r)&&(distance!=Math.abs(a.r-b.r))){
System.out.println("包含");
}else if(distance==Math.abs(a.r-b.r)){
System.out.println("相切");
}else{
System.out.println("相交");
}
}else {
System.out.println("外切");
}
}
public static int max(int a,int b){
int max=b;
if(a>b)
max=a;
return max;
}
public static int min(int a,int b){
int min=b;
if(a<b)
min=a;
return min;
}
}
class ddy_circle{
int x,y,r;
ddy_circle(int x,int y,int r){
this.x=x;
this.y=y;
this.r=r;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public int getR(){
return r;
}
}