基础训练7-矩形相交

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a549654065/article/details/79357531

矩形面积交

问题描述

  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入格式

  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出格式

  输出仅包含一个实数,为交的面积,保留到小数后两位。

样例输入

1 1 3 3
2 2 4 4

样例输出

1.00

 

矩形由两个相对顶点表示。

    rect1{(minx1,miny1)(maxx1, maxy1)}
   rect2{(minx2, miny2)(maxx2, maxy2)}  
相交的结果一定是个矩形,构成这个相交矩形 rect{(minx,miny) (maxx, maxy)} 的点对坐标是:  
   minx  =  max(minx1,  minx2)  
   miny  =  max(miny1,  miny2)  
   maxx  =  min(maxx1,  maxx2)  
   maxy  =  min(maxy1,  maxy2)  
   
如果两个矩形不相交,那么计算得到的点对坐标必然满足:  
 ( minx > maxx )或者( miny > maxy ) 
   
判定是否相交,以及相交矩形是什么都可以用这个方法一体计算完成。

import java.util.Scanner;

public class Main{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		double x1, y1, x2, y2, x3, y3, x4, y4;
		double m1, m2, n1, n2;
		x1 = sc.nextDouble();
		y1 = sc.nextDouble();
		x2 = sc.nextDouble();
		y2 = sc.nextDouble();
		x3 = sc.nextDouble();
		y3 = sc.nextDouble();
		x4 = sc.nextDouble();
		y4 = sc.nextDouble();
		sc.close();
		m1 = Math.min(Math.max(x1, x2), Math.max(x3, x4));
		n1 = Math.min(Math.max(y1, y2), Math.max(y3, y4));
		m2 = Math.max(Math.min(x1, x2), Math.min(x3, x4));
		n2 = Math.max(Math.min(y1, y2), Math.min(y3, y4));
		if (m1 > m2 && n1 > n2)
			System.out.printf("%.2f", (m1 - m2) * (n1 - n2));
		else
			System.out.println("0.00");
	}
}

猜你喜欢

转载自blog.csdn.net/a549654065/article/details/79357531