判断两个矩形是否重叠

PL1,PR1 表示为矩形1 的左上角 和 右下角 的 点
PL2,PR2 表示为矩形2 的左上角 和 右下角 的 点
PR1.x <= PL2.x 表示矩形1 在矩形2 的左边,不重叠
PL1.x >= PR2.x 表示矩形1 在矩形2 的右边,不重叠
PL1.y <= PR2.y 表示矩形1 在矩形2 的下面,不重叠
PR1.y >= PL2.y 表示矩形1 在矩形2 的上面,不重叠

PR1.x <= PL2.x | | PL1.x >= PR2.x | | PL1.y <= PR2.y | | PR1.y >= PL2.y 表示所有不重叠的情况
!(PR1.x <= PL2.x | | PL1.x >= PR2.x | | PL1.y <= PR2.y | | PR1.y >= PL2.y) 表示所有重叠的情况

德摩根定律 等价于

PR1.x > PL2.x && PL1.x < PR2.x && PL1.y > PR2.y && PR1.y < PL2.y



import java.util.*;
import javax.swing.*;  
  class Main {
    public static void main(String[] args){
      Scanner input = new Scanner(System.in);
      System.out.print("Enter r1's center x-, y-coordinates, width, and height:");
      double xR1 = input.nextDouble();
      double yR1 = input.nextDouble();
      double widthOfR1 = input.nextDouble();
      double heightOfR1 = input.nextDouble();
      double PL1x = xR1 - (widthOfR1 / 2);
      double PL1y = yR1 + (heightOfR1 / 2);
      double PR1x = xR1 + (widthOfR1 / 2);
      double PR1y = yR1 - (heightOfR1 / 2);

      System.out.print("Enter r2's center x-, y-coordinates, width, and height:");
      double xR2 = input.nextDouble();
      double yR2 = input.nextDouble();
      double widthOfR2 = input.nextDouble();
      double heightOfR2 = input.nextDouble();
      double PL2x = xR2 - (widthOfR2 / 2);
      double PL2y = yR2 + (heightOfR2 / 2);
      double PR2x = xR2 + (widthOfR2 / 2);
      double PR2y = yR2 - (heightOfR2 / 2);
      
      if(PL1x <= PL2x && PL2x <= PR1x &&
         PR1y <= PL2y && PL2y <= PL1y &&
         PL1x <= PR2x && PR2x <= PR1x &&
         PR1y <= PR2y && PR2y <= PL1y
         ){
        System.out.print("r2 is inside r1");
        }else if(PL2x <= PL1x && PL1x <= PR2x &&
         PR2y <= PL1y && PL1y <= PL2y &&
         PL2x <= PR1x && PR1x <= PR2x &&
         PR2y <= PR1y && PR1y <= PL2y){
        System.out.print("r1 is inside r2");
        }else if(PR1x > PL2x 
                 && PL1x < PR2x 
                 && PL1y > PR2y 
                 && PR1y < PL2y)//PR1.x > PL2.x && PL1.x < PR2.x && PL1.y > PR2.y && PR1.y < PL2.y
        {
        System.out.print("r1 overlaps r2");
        }else{
          System.out.print("r1 does not overlap r2");
        }
      

    }
  }
posted @   Scenery_Shelley  阅读(887)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示