计算两个相同对象的交集

Compute intersection of two identical objects

我有 2 个 Rectangles,它们都有相同的边。

new Rectangle(Arrays.asList(new Coord(1,1), new Coord(2,1), new Coord(2,2), new Coord(1,2)));

根据我的理解,交点应该是 1,但是我的函数 returns -1.

public Rectangle(List<Coord> edges){
        Assert.assertTrue("Provide an exact number of 4 edges", edges.size() == 4);
        this.edges = edges;
        left = getLeft(edges);
        right = getRight(edges);
        top = getTop(edges);
        bottom = getBottom(edges);
    }

private static int computeIntersection(Rectangle rect1, Rectangle rect2){

        int x_overlap = Math.min(rect1.right, rect2.right) - Math.max(rect1.left, rect2.left);
        int y_overlap = Math.min(rect1.bottom,rect2.bottom) - Math.max(rect1.top,rect2.top);
        System.out.println(x_overlap * y_overlap);


        return x_overlap * y_overlap;

    }

在计算交集时我的数学有问题还是我没有考虑到什么?

首先,你应该检查两个矩形是否真的重叠。

并且,您应该使用最小值 top 减去最大值 bottom

private static int computeIntersection(Rectangle rect1, Rectangle rect2){
    if (rect1.left >= rect2.right || rect2.left >= rect1.right
            || rect1.bottom >= rect2.top || rect2.bottom >= rect1.top) {
        return 0;
    } else {
        int x_overlap = Math.min(rect1.right, rect2.right) - Math.max(rect1.left, rect2.left);
        int y_overlap = Math.min(rect1.top,rect2.top) - Math.max(rect1.bottom,rect2.bottom);
        return x_overlap * y_overlap;
    }
}