计算两个相同对象的交集
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;
}
}
我有 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;
}
}