蓝桥杯JAVA 矩形面积交(计算几何)附代码

描述

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

输入

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

输出

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

样例输入1  复制
1 1 3 3
2 2 4 4
样例输出1
1.00

小编刷蓝桥杯刷到   ..矩形面积交(计算几何)..这题目时,一直对“如何确定在坐标系中两个矩形相交”搞不懂,后来经过查阅资料,发现了有两种方法可以确定:

蓝桥杯JAVA 矩形面积交(计算几何)附代码_第1张图片

方法一:

分别找到2个矩形右下角的坐标中最小的x(minx)和最小的y(miny)---P2的点坐标


在找到2个矩形左上角坐标中最大的x(maxx)和最大的y(maxy)---P3的点坐标


最后 相交的矩形即对角线[minx,miny]--[maxx,maxy]所构成的矩形 当然如果minx>maxx或miny>maxy矩形不相交

 可能不好理解,直接上图吧:

蓝桥杯JAVA 矩形面积交(计算几何)附代码_第2张图片

此处P3  P2就是要找的点!

1.应该注意的格式,控制在0.00内,可以使用DecimalFormat 类中的Format方法,控制格式

2.可以调用Math中的求最大(小)值的方法,就不用自己再去做交换比较了

3第一个if里的条件有个bug,就是当c[0]-c[1]=0||c[2]-c[3]=0时,会影响输入,所以在此小编用了两个if,而没有用else,用else分值会更低(亲测有效)

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

import java.text.DecimalFormat;
import java.util.Scanner;
public class XiangJiao {
public static void main(String[] args) {
double a[]=new double[4];
double b[]=new double[4];
double c[]=new double[4];
DecimalFormat df=new DecimalFormat("#.00");
Scanner sc=new Scanner(System.in);
int i,j;
for(i=0;i<4;i++)
{
a[i]=sc.nextDouble();
b[i]=sc.nextDouble();
}
//实则找左上角X最小
c[0]=Math.min(Math.max(a[0], a[1]),Math.max(a[2],a[3]));
//右下角X最大
c[1]=Math.max(Math.min(a[0], a[1]),Math.min(a[2], a[3]));
//实则找左上角Y最小
c[2]=Math.min(Math.max(b[0], b[1]),Math.max(b[2],b[3]));
//实则找右下角Y最大
c[3]=Math.max(Math.min(b[0], b[1]),Math.min(b[2], b[3]));
if(c[0]-c[1]<0||c[2]-c[3]<0)
{
System.out.println("0.00");
}
if(c[0]-c[1]>=0||c[2]-c[3]>=0)
{
System.out.println((c[0]-c[1])*(c[2]-c[3]));
}
}}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

蓝桥杯JAVA 矩形面积交(计算几何)附代码_第3张图片


方法二:

方法二是利用数学原理(上图)

蓝桥杯JAVA 矩形面积交(计算几何)附代码_第4张图片

即求出两个矩形的中心点,然后判断:OA OB横坐标距离<矩形A B横边和/2&&OA OB纵坐标距离<矩形A B纵边和/2   这两个条件同时符合才算相交!

参考代码:

   return  abs ((a.x1+a.x2)-(b.x1+b.x2))<(a.x2-a.x1+b.x2-b.x1)
         &&  abs ((a.y1+a.y2)-(b.y1+b.y2))<(a.y2-a.y1+b.y2-b.y1) );

你可能感兴趣的:(蓝桥杯JAVA 矩形面积交(计算几何)附代码)