题目大意:求两个矩形相交的面积,矩形的边均平行于坐标轴。
我的想法是把矩形的八个x坐标和y坐标分别排序,然后相加的小矩形的四个顶点一定是排序后的中间值。
另外还有判断一下是否相交。
AC代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;
double x[4], y[4];
inline bool judge(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) {
if (x1 <= x3 && x1 <= x4 && x2 <= x3 && x2 <= x4) return true;
else if (x3 <= x1 && x3 <= x2 && x4 <= x1 && x4 <= x2) return true;
else if (y1 <= y3 && y1 <= y4 && y2 <= y3 && y2 <= y4) return true;
else if (y3 <= y1 && y3 <= y2 && y4 <= y1 && y4 <= y2) return true;
else return false;
}
inline void comp_x(double x1, double x2, double x3, double x4) {
x[0] = x1, x[1] = x2, x[2] = x3, x[3] = x4;
sort(x, x+4);
return ;
}
inline void comp_y(double y1, double y2, double y3, double y4) {
y[0] = y1, y[1] = y2, y[2] = y3, y[3] = y4;
sort(y, y+4);
return ;
}
int main() {
double x1, y1, x2, y2, x3, y3, x4, y4;
while (~scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4)) {
if (judge(x1, y1, x2, y2, x3, y3, x4, y4)) {
printf("0.00\n");
} else {
comp_x(x1, x2, x3, x4);
comp_y(y1, y2, y3, y4);
printf("%.2lf\n", (x[2]-x[1])*(y[2]-y[1]));
}
}
return 0;
}
本文介绍了一种求解两个矩形相交面积的方法,通过将矩形的坐标排序并判断是否相交来计算结果。该算法适用于矩形边平行于坐标轴的情况。
&spm=1001.2101.3001.5002&articleId=38407623&d=1&t=3&u=75445eb13ded468d9d590a0045cff2f1)
1082

被折叠的 条评论
为什么被折叠?



