判断两圆的状态

题目如下:

圆之间的的状态有以上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;
	 }
 } 










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值