Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找到两个矩形的交点_Java_Intersection - Fatal编程技术网

Java 找到两个矩形的交点

Java 找到两个矩形的交点,java,intersection,Java,Intersection,我们有两个矩形示例: public static Rectangle rect1 = new Rectangle(20, 300, 400, 160); public static Rectangle rect2 = new Rectangle(150, 60, 230, 450); 问题是要找到一种算法来查找这两个矩形的所有交点您可以使用内置方法来获取交点 您应该这样做: public Area getRectanglesColisionArea(Rectangle rect1, Rec

我们有两个矩形示例:

 public static Rectangle rect1 = new Rectangle(20, 300, 400, 160);
 public static Rectangle rect2 = new Rectangle(150, 60, 230, 450);

问题是要找到一种算法来查找这两个矩形的所有交点

您可以使用内置方法来获取交点

您应该这样做:

public Area getRectanglesColisionArea(Rectangle rect1, Rectangle rect2){
    Area shape1 = new Area(rect1);
    Area shape2 = new Area(rect2);

    return shape1.intersect(shape2);
}
返回区域形状为

要仅调用函数,请执行以下操作:

    Rectangle rect1 = new Rectangle(20, 300, 400, 160);
    Rectangle rect2 = new Rectangle(150, 60, 230, 450);
    Area result = getRectanglesColisionArea(rect1,rect2);
面积结果是交点的形状,从那里可以得到交点:

    Rectangle inters = result.getBounds();
    Double x1=inters.getX();
    Double y1=inters.getY();
    Double x2=inters.getX()+inters.getWidth();
    Double y2=inters.getY()+inters.getHeight();

对于两个矩形,相交的情况有四种

  • 一个在另一个里面,或者它们完全不相交——没有交叉点
  • 它们共用一个点—1个交点
  • 它们正好在四个点相交
  • 它们共享一条或多条边的一部分——无限交点

  • 这些条件可用于编写测试以找到解决方案。

    听起来像是碰撞检测问题,这听起来更像是数学而不是Java。如果你理解它的数学,编码应该很简单。(我认为交点是一个区域,而不是一组特定的离散点。)对于两个矩形的交点,可能有无穷多个解,也可能没有解
        Rectangle inters = result.getBounds();
        Double x1=inters.getX();
        Double y1=inters.getY();
        Double x2=inters.getX()+inters.getWidth();
        Double y2=inters.getY()+inters.getHeight();