java - 检查 MyRectangle2D.java 类中矩形是否重叠

标签 java

我的任务是检查两个点是否在一个矩形内,检查一个矩形是否在另一个矩形内,并检查一个矩形是否与另一个矩形重叠

我完成了前两个步骤,但无法解决重叠方法。

这就是我所做的。

public class MyRectangle2D {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        MyRectangle2D rect = new MyRectangle2D();

        //returns area of default rectangle
        System.out.println(rect.getArea());

        //returns perimeter of default rectangle
        System.out.println(rect.getPerimeter());

        //returns true if default (0,0) is inside rectangle
        System.out.println(rect.contains(0,0));

        //returns false if point is not in triangle
        System.out.println(rect.contains(10,10));

        MyRectangle2D r1 = new MyRectangle2D(10,2,6,4);
        System.out.println("The area of your rectangle is " + r1.getArea() + 
            " \nthe perimeter of your rectangle is " + r1.getPerimeter());

        System.out.println("Testing Rectangle 2 with points (1,8)...");

        //following lines test the contain(x,y) method
        System.out.println(r1.contains(1,8) ? "Point (1,8) is on Rectangle" : "Point(1,8) is not on Rectangle");

        System.out.println("Testing Rectangle 2 with points (10,1)...");

        System.out.println(r1.contains(10,1) ? "Point (10,1) is on Rectangle" : "Point(10,1) is not on Rectangle");

        //following lines test contains(rect) method
        System.out.println(r1.contains(new MyRectangle2D(9,1,1,1)) ? "Rectangle is inside" : "Not inside");
        System.out.println(r1.contains(new MyRectangle2D(9,1,10,2)) ? "Rectangle is inside" : "Rectangle is not inside");

        //following lines test if rectangles overlap
        System.out.println(r1.overlaps(new MyRectangle2D(4,2,8,4)));
    }

    double x;
    double y;
    double width;
    double height;

    private MyRectangle2D(){
        x = 0;
        y = 0;
        width = 1;
        height = 1;
    }

    private MyRectangle2D(double newX, double newY, 
             double newWidth, double newHeight){
         setX(newX);
         setY(newY);
         setHeight(newHeight);
         setWidth(newWidth);
     }

    double getX(){
        return x;
    }

    double getY(){
        return y;
    }

    void setX(double newA){
        x = newA;
    }

    void setY(double newA){
        y = newA;
    }

    double getWidth(){
        return width;
    }

    double getHeight(){
        return height;
    }

    void setWidth(double newA){
        width = newA;
    }

    void setHeight(double newA){
        height = newA;
    }

    double getArea(){
        double area = width * height;
        return area;
    }

    double getPerimeter(){
        double perimeter = (2 * width) + (2 * height);
        return perimeter;
    }

    boolean contains(double x, double y){
        boolean inside = false;
        if(x<(getWidth()/2 + getX()) && x>getX()-(getWidth()/2)){
            if(y<(getY() + getHeight()/2) && y>getY()-(getHeight()/2))
            inside = true;
        }
        return inside;
    }

    boolean contains(MyRectangle2D r){
        boolean inside = false;
        if(r.getX()<(getWidth()/2 + getX()) && r.getX()>getX()-(getWidth()/2)){
            if(r.getY()<(getY() + getHeight()/2) && r.getY()>getY()-(getHeight()/2)){
                if(r.getWidth()<=getWidth() && r.getHeight()<=getHeight())
                inside = true;
            }   
        }   
        return inside;
    }

    boolean overlaps(MyRectangle2D r){
        boolean inside = false;
        if(contains(r.getX()+r.getWidth(),r.getY()+r.getHeight()))
        inside = true;

        if(contains(r.getX()-r.getWidth(),r.getY()-r.getHeight()))
        inside = true;
        return inside;

    }

}

最佳答案

这将发现该矩形是否与另一个矩形重叠,不要忘记将其标记为答案并尽可能投票。

public boolean overlaps (MyRectangle2D r) {
    return x < r.x + r.width && x + width > r.x && y < r.y + r.height && y + height > r.y;
}

关于java - 检查 MyRectangle2D.java 类中矩形是否重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29309591/

相关文章:

java - JSON 数组长度为-1,但我可以清楚地看到 JSON 中的对象

java - 如何设置JAssimp?

java - 如何向使用 Selenium Webdriver 处理的 HTTP 请求添加 header 或参数?

java - 如何从数组中删除特定元素

java - 如何用java从数据中删除 header

java - Weblogic .ear部署java.lang.ClassNotFoundException

java - Android sqlite rawquery selection args问题

java - 远程 EJB 与本地 EJB 的可伸缩性

java - 如何获取新创建的JPMS层的ClassLoader?

java - 交换数组中的两个字符串,Java