java 面向对象_圆类

计算两个圆的位置关系

Circle:类

package _02_第二章类与对象.C202_02_03_圆类;

public class Circle {
    /**
     * 相离
     */
    public static final byte DISJOINT = 0;
    /**
     * 外切
     */
    public static final byte EXTERNAL_CUTTING  = 1;
    /**
     * 相交
     */
    public static final byte INTERSECT = 2;
    /**
     * 内切
     */
    public static final byte INTERNAL_CUTTING = 3;
    /**
     * 内含
     */
    public static final byte CONTAIN = 4;

    private Point p;//圆心
    private float r;//半径

    public  void init(Point p,float r){
        this.p = p;
        this.r = r;
    }
    public  void init(float x,float y,float r){  //函数重载
        this.p = new Point(); //避免空指针 没有指向任何东西 所以先 声明一个引用
        p.init(x,y);
        this.r = r;
    }
    public float area(){ //不需要给参数
        return  (float) (Math.PI*r*r);
    }
    public float C(){
        return (float) (2*Math.PI*r);
    }

    /**
     * 判断两个圆的位置关系
     * @param c 另一个圆
     * @return 位置关系 : 0-相离 / 1-外切 / 2-相交 / 3-内切 / 4-内含
     */
    public byte poistion(Circle c){
       float d = this.p.distance(c.p);

       float d1 = this.r+c.r;
       float d2 = Math.abs(this.r-c.r);
       if (Math.abs(d-d1) < 1e-6){
           return EXTERNAL_CUTTING;
       }
        if (Math.abs(d-d2) < 1e-6){
            return INTERNAL_CUTTING;
        }
        if (d > d1){
            return DISJOINT;
        }
        if (d > d2){ //能够到这来 就已经排出了 大于d1的情况 让代码更加简洁
            return INTERSECT;
        }
       return  CONTAIN;
    }
}

Point类:

package _02_第二章类与对象.C202_02_03_圆类;

public class Point {
    private  float x;//x是属性
    private  float y;

    public void init (float x,float y){ //x是形参 函数内部有效
        this.x = x; //如果写成 x = x就错了 ,需要加this 不然起不到改float x的作用
        this.y = y;
    }

    /**
     * 计算两点之间的距离
     * @param p 输入的坐标值
     * @return 带回p点和 x,y点 之间的值
     */
    public float distance(Point p){
        return (float) Math.sqrt((this.x-p.x)*(this.x-p.x)+(this.y-p.y)*(this.y-p.y));
    }
}

主函数 Text:

package _02_第二章类与对象.C202_02_03_圆类;
public class Test {
    public static void main(String[] args) {
        Circle c1 = new Circle();
        Circle c2 = new Circle();

        Point p = new Point();
        p.init(0,0);
        c1.init(p,3);
        c2.init(3,4,2);

        System.out.println(c1.C());
        System.out.println(c1.area());

        switch (c1.poistion(c2)){
            case Circle.DISJOINT:
                System.out.println("相离");break;
            case Circle.EXTERNAL_CUTTING:
                System.out.println("外切");break;
            case Circle.INTERSECT:
                System.out.println("相交");break;
            case Circle.INTERNAL_CUTTING:
                System.out.println("内切");break;
            case Circle.CONTAIN:
                System.out.println("内含");break;
        }
    }
}

结果:

18.849556
28.274334
外切

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值