java - 如何判断一个矩形是否相交?

标签 java graphics2d

嗨,我正在尝试创建此构造函数:public Rectangle createIntersection(Rectangle r){ .... 返回一个新的 Rectangle 对象,表示此 Rectangle 与指定 Rectangle 的交集。

到目前为止,我已经为构造函数完成了此操作,但我不确定它是否正确:

public Rectangle createIntersection(Rectangle r) { 
   Rectangle r1 = new Rectangle () ; 
   Rectangle r2 = new Rectangle ();
   r2.setRect(r);
   r2.createIntersection(r1); 
   return r2;
}

然后我应该创建这个构造函数public Boolean intersects (Rectangle r),如果它与指定的矩形相交,则返回 true,如果不相交,则返回 false。如果它们的内部重叠,则称它们相交。所以我知道为此我需要使用我一直在使用的四个实例变量(int x int y int height 和 int width)。我知道它必须通过执行 x + width 来确定它是否相交,如果这个值小于它对面的点,那么矩形就会重叠。我不知道如何写这个。

最佳答案

此方法返回两个矩形的重叠区域,如果不重叠则返回 null:

 public static Rectangle createIntersection(Rectangle r1, Rectangle r2) {

     // Left x
     int leftX = Math.max(r1.x, r2.x);

     // Right x
     int rightX = (int) Math.min(r1.getMaxX(), r2.getMaxX());

     // TopY
     int topY = Math.max(r1.y,r2.y);

     // Bottom y
     int botY =  (int) Math.min(r1.getMaxY(), r2.getMaxY());

     if ((rightX > leftX) && (botY > topY)) {
         return new Rectangle(leftX, topY, (rightX - leftX), (botY -topY));
     }

     return null;
 }

一些测试:

 public static void main(String [] args) {

        Rectangle r1 = new Rectangle(10,10,10,10);
        Rectangle r2 = new Rectangle(10,10,10,10);
        System.out.println(createIntersection(r1, r2));

        r1 = new Rectangle(10,10,10,10);
        r2 = new Rectangle(15,15,10,10);
        System.out.println(createIntersection(r1, r2));

        r1 = new Rectangle(20,20,10,10);
        r2 = new Rectangle(15,15,10,10);
        System.out.println(createIntersection(r1, r2));

        r1 = new Rectangle(15,30,10,10);
        r2 = new Rectangle(15,15,10,10);
        System.out.println(createIntersection(r1, r2));

        r1 = new Rectangle(15,30,10,10);
        r2 = new Rectangle(15,15,10,20);
        System.out.println(createIntersection(r1, r2));
 }

如果代码不清楚,请随时询问。

关于java - 如何判断一个矩形是否相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39319499/

相关文章:

java - 使用扫描仪类java复制文件

java - 如何打开与应用程序的.jar文件位于同一目录中的文件?

java - hibernate 中的关系 1-1 不起作用 : unknown column account0_. date_of_birth

java - 如何使用 JPA 持久化两个实体

java - 如何通过快速拖动鼠标光标绘制重复椭圆的连续曲线?

Java绘制图像插值

java - 在 Applet 中使用 Java Graphics 时如何使用 BasicStroke 方法?

java - 如何获取回收者 View 中所有项目的总数

java - Swing 中 AA 和插值的全局渲染提示

java - 需要帮助来消除我的 Swing 应用程序中的某些疑问