Abdelsalam Almayyen
Abdelsalam Almayyen

Reputation: 45

java circle inside a circle , how to know if two circles overlap

this is some code i wrote in java, it is a circle object class. i wrote methods i need two more methods and im struggeling with the first one is a method that contains (circle c) that returns true if the specified circle c is inside circle. and the second one is a method overlaps(circle c) that returns true if th especified circle c overlaps with this circle. all i need is how to make those two methods with the parameter being another circle object

this is my code

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;
}

}

Upvotes: 0

Views: 2875

Answers (1)

MT0
MT0

Reputation: 167972

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() );
    }
}

Upvotes: 1

Related Questions