推荐学习博客:https://www.cnblogs.com/avril/archive/2012/11/13/2767577.html
设矩形A的左下角坐标为(xa1,ya1),右上角坐标为(xa2,ya2)
矩形B的左下角坐标为(xb1,yb1),右上角坐标为(xb2,yb2)
判断是否相交,可通过两矩形的中心点连线与其坐标的关系
设ox为矩形A的中心点的横坐标,oy为矩形A的中心点的纵坐标
设ex为矩形B的中心点的横坐标,ey为矩形B的中心点的纵坐标
ox=(xa1+xa2)/2;
oy=(ya1+ya2)/2;
ex=(xb1+xb2)/2;
ey=(yb1+yb2)/2;
即若两矩形能相交,需同时满足
|ex-ox|<=((xa2-xa1)/2+(xb2-xb1)/2)
|ey-oy|<=((ya2-ya1)/2+(yb2-yb1)/2)
【假设xa2>xa1,xb2>xb1,ya2>ya1,yb2>yb1的情况】【需同时满足】
当两矩形相交:
设cx为相交矩形的左下角点的横坐标
cy为相交矩形的左下角点的纵坐标
ex为相交矩形的右上角点的横坐标
ey为相交矩形的右上角点的纵坐标
cx=max(xa1,xb1); ///左下角的x坐标
cy=max(yb1,yb1); ///左下角y坐标
ex=min(xa2,xb2); ///右上角x坐标
ey=min(ya2,yb2); ///右上角y坐标
面积s_s=fabs(cx-ex)*fabs(cy-ey);
例题:G - IoU
Xzz需要计算两个矩形的交叉联盟(IoU),你能帮助他吗?
矩形(x,y,w,h)表示矩形MNPQ,M(x,y),N(x,y + h),P(x + w,y + h),Q(x + w,y) 。
IoU =重叠面积/结合面积。
输入
输入文件的第一行包含一个整数T(0 每种情况的描述如下: 每个输入集的第一行包含整数x1,y1,w1,h1。 每个输入集的第二行包含整数x2,y2,w2,h2。 0≤x,y,w,h≤100000 产量 每个测试用例的输出描述如下: 每个测试用例的输出的第一行包含数字k-两个矩形的IoU。 输出应舍入为小数点后的2位数。 样本输入 样本输出 题解: w,h分别是其矩阵的宽和高,题目给定w,h>=0 左下角坐标(x,y),右上角坐标(x+w,y+h) 求相交矩形的面积和两矩形相交后组成的几何图形的面积的比值 代码: 2
1 1 1 1
1 1 2 2
1 1 2 1
1 1 1 2
0.25
0.33
#include