判断两矩形是否相交

问题定义:给定两个边与坐标轴平行的矩形,分别由左上角与右下角两点指定,即矩形(P1,P2)与(P3,P4),判断两矩形是否相交。

今天笔试的一个题目,其实挺简单的~~可惜当时没想出来

解决思路见代码:

import java.util.Scanner;

public class Rectangle {
/**
 * 给定两个边与坐标轴平行的矩形,分别由左上角与右下角两点指定,即矩形(P1,P2)与(P3,P4),判断两矩形是否相交。
 * 
 * 
 * 解决思路 :通过绘图不难发现,如果两个矩形相交,那么它们的外包矩形的长度或者宽度就会小于两个矩形的长度或者宽度之和
 * @param args
 */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
     Scanner sc=new Scanner(System.in);
     //输入八个整数,按照顺序两个整数表示一个点,两点构成一个矩形
     //这里稍微简便考虑,假设输入的对角线坐标为左下角和右上角坐标;
     while(sc.hasNext()){
         String[] str=sc.nextLine().split(" ");
         int arr[]=new int[str.length];
         for (int i=0;i<arr.length;i++){
             arr[i]=Integer.parseInt(str[i]);
         }
         //外包矩形的x、y长度
         int xrange=Math.abs(arr[7]-arr[0]);
         int yrange=Math.abs(arr[1]-arr[6]);
         //两个矩形的x、y长度之和
         int recx=Math.abs(arr[2]-arr[0])+Math.abs(arr[4]-arr[6]);
         int recy=Math.abs(arr[1]-arr[3])+Math.abs(arr[5]-arr[7]);
         //如果两个矩形的长度之和或者宽度之和大于外包矩形的长度或者宽度,则说明相交
         if(recx>xrange||recy>yrange){
             System.out.println("两个矩形相交!");
             //return;
         }else{
             System.out.println("不相交!");
            // return;
         }
         
         
     }
    }

}
原文地址:https://www.cnblogs.com/zwwang/p/13411108.html