基础练习 矩形面积交

问题描述

  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
  输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00
 
要点:
  1、判断是否相交
  2、通脱对坐标进行排序求出中间相交部分的两个顶点(这个比较巧妙,刚开始我一直在画图,希望通过分类判断进行求解)
  3、刚开始的输入不一定是从左到右的坐标需要进行调整
java实现(这个代码写的不太好)
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        double x1 = scanner.nextDouble();
        double y1 = scanner.nextDouble();
        double x2 = scanner.nextDouble();
        double y2 = scanner.nextDouble();

        if(x1>x2){
            double temp = x1;
            x1 = x2;
            x2 = temp;

        }

        if(y1>y2){
            double temp = y1;
            y1 = y2;
            y2 = temp;
        }

        double a1 = scanner.nextDouble();
        double b1 = scanner.nextDouble();
        double a2 = scanner.nextDouble();
        double b2 = scanner.nextDouble();

        if(a1>a2){
            double temp = a1;
            a1 = a2;
            a2 = temp;
        }

        if(b1>b2){
            double temp = b1;
            b1 = b2;
            b2 = temp;
        }

        //判断两个矩形是否相交
        if(x2<=a1||y2<=b1||a2<=x1||b2<=y1){
            System.out.println("0.00");
        }
        else {
            double [] x ={x1,x2,a1,a2};
            double [] y ={y1,y2,b1,b2};
            Arrays.sort(x);
            Arrays.sort(y);

            double area = (x[2]-x[1])*(y[2]-y[1]);
            System.out.printf("%.2f
",Math.abs(area));
            //System.out.println();
        }
    }
}

c++实现

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;

int main(){
    double x[4];
    double y[4];
    for(int i=0;i<4;i++){
        cin>>x[i]>>y[i];
    }

    if(x[0]>x[1]){
        swap(x[0],x[1]);
    }

    if(y[0]>y[1]){
        swap(y[0],y[1]);
    }

    if(x[2]>x[3]){
        swap(x[2],x[3]);
    }

    if(y[2]>y[3]){
        swap(y[2],y[3]);
    }

    if(x[1]<=x[2]||y[1]<=y[2]||x[3]<=x[0]||y[3]<=y[0]){
        cout<<"0.00"<<endl;
    }
    else{
        sort(x,x+4);
        sort(y,y+4);
        //double area=(x[2]-x[1])*(y[2]-y[1]);
        printf("%.2lf
",(x[2] - x[1]) * (y[2] - y[1]));
    }
    return 0;
}
原文地址:https://www.cnblogs.com/zhanghaijie/p/8328174.html