所以我有这个程序需要测试两个矩形并检查:
参考和测试矩形的中心坐标(x,y)及其宽度和高度都是定义的。
我相信我的第一张支票编码正确,但我无法弄清楚重叠,共享边界和完全不同的最后三项检查的数学。
以下是我目前为止进行的四项检查的代码:
//returns true if the specified rectangle is inside this rectangle
public boolean contains(MyRectangle2D r){
if(this.x > r.x + r.width && x + width < r.x && y > r.y +r.height && y + height < r.y){
return true;
}
else{
return false;
}
}
//returns true if the specified rectangle overlaps with this rectangle
public boolean overlaps(MyRectangle2D r) {
if (this.x < r.x + r.width && x + width > r.x && y < r.y + r.height && y + height > r.y){
return true;
}
else{
return false;
}
}
//returns true if only the boundaries touch
public boolean abut(MyRectangle2D r) {
if(this.x = r.x + r.width && x + width = r.x || y = r.y +r.height && y + height = r.y){
return true;
}
else{
return false;
}
}
//returns true if the rectangles are not touching at all
public boolean distinct(MyRectangle2D r) {
}
答案 0 :(得分:0)
您可以使用Java Topolygy Suite(JTS):
org.locationtech.jts.util.GeometricShapeFactory
(API)创建包含参数的矩形:within
(API)overlaps
,org.locationtech.jts.geom.Geometry
,...)
简单代码:
// method to create your rectangles like before (Polygon objects)
public static Polygon createPolygon(Coordinate center, double width, double height){
GeometricShapeFactory shapeFactory = new GeometricShapeFactory();
shapeFactory.setNumPoints(4);
shapeFactory.setCentre(center);
shapeFactory.setWidth(width);
shapeFactory.setHeight(height);
return shapeFactory.createRectangle();
}
public static void main(String[] args) {
// create your rectagles
Polygon rectangleA = createPolygon(new Coordinate(0, 0), 5, 10);
Polygon rectangleB = createPolygon(new Coordinate(2, 0), 5, 10);
// ### check your constraints
// 1. rectangle is within the reference rectangle
boolean bWithinA = rectangleB.within(rectangleA); // false
// 2. rectangle is overlapping the reference rectangle
boolean bOverlappingA = rectangleB.overlaps(rectangleA); // true
// 3. rectangle is only sharing a border with the reference rectangle
boolean bSharesBorderA = rectangleB.touches(rectangleA); // false
// 4. rectangle and reference rectangle are distinct
boolean bDistinctsA = rectangleB.disjoint(rectangleA); // false
}