圈内的java圈,如何知道两个圈是否重叠

时间:2015-11-07 00:25:19

标签: java object geometry

这是我在java中编写的一些代码,它是一个圆形对象类。我写的方法我还需要两个方法,而第一个方法就是 包含(circle c)的方法,如果指定的圆c在圆内,则返回true。第二个是重叠(圆圈c)的方法,如果指定的圆圈c与该圆圈重叠,则返回真。我需要的是如何使用参数作为另一个圆对象

来制作这两个方法

这是我的代码

public class Circle
{
// instance variables - replace the example below with your own
private double radius;
private double centerX;
private double centerY;

/**
 * Constructor for objects of class Circle
 */
public Circle()
{
  this.radius = 1;
  this.centerX = 0;
  this.centerY = 0;
}
/**
 * Constructor for objects of class Circle
 */
public Circle(double radius, double centerx, double centery)
{
  this.radius = radius;
  this.centerX = centerX;
  this.centerY = centerY;
}
 /**
 * Constructor for objects of class Circle
 */
public Circle(double pRadius)
{
     radius = pRadius;
}
/**
 * An example of a method - replace this comment with your own
 * 
 * @param  y   a sample parameter for a method
 * @return     the sum of x and y 
 */
public void setRadius(double pRadius)
{
    radius = pRadius;
}
/**
 * getRadius method will return the radius of the cricle
 * @param none 
 * @return radius of type double
 */
 public double getRadius()
{
    return radius ;
}
/**
 * getcenterX method will return the x coordinates of the circle
 * @param none 
 * @return centerx of type double
 */
 public double getCenterX()
{
    return centerX ;
}
/**
 * getcenterY method will return the y coordinates of the circle
 * @param none 
 * @return centery of type double
 */
 public double getCenterY()
{
    return centerY ;
}
/**
 * 
 */
   public double calcPerimeter()
{
    return 2*Math.PI*getRadius();
}
/**
 * 
 */
   public double calcArea()
{
    return Math.PI*Math.pow(getRadius(),2);
}
/**
 * 
 */
public double distance(double x1, double y1, double x2, double y2)
{
    return ( Math.sqrt(Math.pow(x1-x2,2)+ Math.pow(y1-y2,2))) ;

}
/**
 * 
 */
public boolean contains(double x, double y)
{
    double dist = distance(x, y, centerX, centerY); // calculate the distance between the point(x,y) and center of the circle
    boolean flag = false;
    if ( dist < radius)
    {
        flag = true;

    }
    else if ( dist > radius)
    {
       flag = false ;
    }
    else 
    {
        System.out.println("The point is on the circle.");
    }
    return flag;
}

}
/**
 * 
 */
public String toString()
{
    String outString = "The radius of the circle is: " + getRadius() + "\nThe perimeter of the circle object is; " + calcPerimeter()+ "\nThe area of the circle is: " + calcArea() ;
    return outString;
}

}

1 个答案:

答案 0 :(得分:1)

import java.awt.geom.Point2D;

/**
 *
 * @author MT0
 */
public class Circle {
    private Point2D.Double center;
    private double radius;

    public Circle(
            final double x,
            final double y,
            final double r
    ){
      assert( r >= 0 );
      center = new Point2D.Double( x, y );
      radius = r;
    }

    public Point2D.Double getCenter(){
        return center;
    }

    public double getRadius(){
        return radius;
    }

    public Double distance( final Point2D.Double point ){
        if ( point == null )
            return null;
        return getCenter().distance( point );
    }

    public boolean contains( final Point2D.Double point ){
        if ( point == null )
            return false;
        return distance( point ) <= getRadius();
    }

    public boolean overlaps( final Circle c ){
        return distance( c.getCenter() ) <= getRadius() + c.getRadius();
    }

    public boolean contains( final Circle c ){
        if ( c == null )
            return false;
        return distance( c.getCenter() ) <= Math.abs( getRadius() - c.getRadius() );
    }
}