Return 所有矩形的并集
Return union of all rectangles
我是 Java 的新手,有一个问题我无法解决。
- union (Rectangle ... rectangles) 应该return 给定的矩形
所有矩形的并集。如果 rectangles 为空,return null.
我创建了一个辅助方法来计算 2 个矩形的并集,然后尝试以某种方式将其集成到并集方法中,但没有成功。我有点必须对 2 个矩形的 交叉点 做同样的事情,但也无法完成。
你们能帮帮我吗?下面是我的代码。
public class Rectangle {
int x, y, width, height;
public Rectangle(int xInput, int yInput, int widthInput, int heightInput) {
if (xInput <= 0 || yInput <= 0 || widthInput <= 0 || heightInput <= 0) {
return;
}
this.x = xInput;
this.y = yInput;
this.width = widthInput;
this.height = heightInput;
}
public static Rectangle union(Rectangle... rectangles) {
Rectangle s = new Rectangle(0, 0, 0, 0);
if (rectangles.length != 0) {
for (Rectangle r : rectangles) {
s = unionOfTwo(s, r);
}
return s;
} else {
return null;
}
}
public static Rectangle unionOfTwo(Rectangle rec1, Rectangle rec2) {
int x1 = Utils.min(rec1.x, rec2.x);
int x2 = Utils.max(rec1.x + rec1.width, rec2.x + rec2.width) - x1;
int y1 = Utils.min(rec1.y, rec2.y);
int y2 = Utils.max(rec1.y + rec1.height, rec2.y + rec2.height) - y1;
return new Rectangle(x1, y1, x2, y2);
}
}
将所有矩形转换为 [XMin, XMax] x [YMin, YMax] 表示法。
求最小值的最小值和最大值的最大值。
转换回 [XMin, Width] x [YMin, Height] 表示法。
对于所有矩形的交集,类似地进行,但是
- 求最小值的最大值和最大值的最小值
如果 Width 或 Height 为负,交集无效。
问题在这里:
public static Rectangle union(Rectangle... rectangles) {
Rectangle s = new Rectangle(0, 0, 0, 0); // <-- wrong
if (rectangles.length != 0) {
for (Rectangle r : rectangles) {
s = unionOfTwo(s, r);
}
return s;
} else {
return null;
}
}
这是因为如果你的矩形不重叠(0, 0),你会得到错误的结果。有多种修复方法,这里是其中一种:
public static Rectangle union(Rectangle... rectangles) {
Rectangle s = null;
for (Rectangle r : rectangles) {
if (s == null)
s = r;
else
s = unionOfTwo(s, r);
}
return s;
}
我是 Java 的新手,有一个问题我无法解决。
- union (Rectangle ... rectangles) 应该return 给定的矩形 所有矩形的并集。如果 rectangles 为空,return null.
我创建了一个辅助方法来计算 2 个矩形的并集,然后尝试以某种方式将其集成到并集方法中,但没有成功。我有点必须对 2 个矩形的 交叉点 做同样的事情,但也无法完成。
你们能帮帮我吗?下面是我的代码。
public class Rectangle {
int x, y, width, height;
public Rectangle(int xInput, int yInput, int widthInput, int heightInput) {
if (xInput <= 0 || yInput <= 0 || widthInput <= 0 || heightInput <= 0) {
return;
}
this.x = xInput;
this.y = yInput;
this.width = widthInput;
this.height = heightInput;
}
public static Rectangle union(Rectangle... rectangles) {
Rectangle s = new Rectangle(0, 0, 0, 0);
if (rectangles.length != 0) {
for (Rectangle r : rectangles) {
s = unionOfTwo(s, r);
}
return s;
} else {
return null;
}
}
public static Rectangle unionOfTwo(Rectangle rec1, Rectangle rec2) {
int x1 = Utils.min(rec1.x, rec2.x);
int x2 = Utils.max(rec1.x + rec1.width, rec2.x + rec2.width) - x1;
int y1 = Utils.min(rec1.y, rec2.y);
int y2 = Utils.max(rec1.y + rec1.height, rec2.y + rec2.height) - y1;
return new Rectangle(x1, y1, x2, y2);
}
}
将所有矩形转换为 [XMin, XMax] x [YMin, YMax] 表示法。
求最小值的最小值和最大值的最大值。
转换回 [XMin, Width] x [YMin, Height] 表示法。
对于所有矩形的交集,类似地进行,但是
- 求最小值的最大值和最大值的最小值
如果 Width 或 Height 为负,交集无效。
问题在这里:
public static Rectangle union(Rectangle... rectangles) {
Rectangle s = new Rectangle(0, 0, 0, 0); // <-- wrong
if (rectangles.length != 0) {
for (Rectangle r : rectangles) {
s = unionOfTwo(s, r);
}
return s;
} else {
return null;
}
}
这是因为如果你的矩形不重叠(0, 0),你会得到错误的结果。有多种修复方法,这里是其中一种:
public static Rectangle union(Rectangle... rectangles) {
Rectangle s = null;
for (Rectangle r : rectangles) {
if (s == null)
s = r;
else
s = unionOfTwo(s, r);
}
return s;
}