任意方位矩形相交面积计算

这篇博客介绍了一种计算两个任意方向矩形IOU的算法,通过计算边的交点生成多边形并分割成三角形来估算相交面积。作者提供了一个包括矩形定义、交点计算、相交面积计算的C++代码实现,但指出其效率有待提高。
摘要由CSDN通过智能技术生成

因应用要求,需要设计一个计算两个任意方位的矩形IOU的函数,查阅了很多资料,都没有找到。网上大多数代码都是只能实现与坐标轴平行的两个矩形的运算,所以自己写了一个(哎,没有免费的午餐,只能自己生产了,我也很绝望呀)。主要思想就是先算出两个矩阵边的交点,然后生成一个多边形,最后将多边形分割成三角形进行计算。代码详细如下:

1.简单的矩形定义类

#include <algorithm>

#include <csignal>
#include <ctime>
#include <map>
#include <string>
#include <utility>
#include <vector>
#include <math.h>
#include <iostream>


#define Max(a,b) ((a>b)? a:b)
#define Min(a,b) ((a<b)? a:b)
#define Pi 3.1415926
class NormalizedBBox
{
public:
float x;  //矩形中心坐标x
float y;  //矩形中心坐标y
float w;  //矩形宽
float h;  //矩形高
float theta;  //矩形倾角
NormalizedBBox(float x , float y , float w , float h , float theta );

};


2.矩形简单构造函数

#include "bbox_util.h"
NormalizedBBox::NormalizedBBox(float x, float y, float w, float h, float theta)
{
this->x = x;
this->y = y;
this->w = w;
this->h = h;
this->theta = theta;
}


3.主要用于计算的函数

//(1)根据两个矩形的8条边,计算交点。

void getBoxpoint(const vector< vector<float> > &temp_lines, vector< vector<float> >& temp_bbox1_point, vector< vector<float> >& temp_bbox2_point){ 

vector<float> point(2, 0);
point[0] = (temp_lines[0][1] - temp_lines[3][1]) / (temp_lines[3][0] - temp_lines[0][0]);
point[1] = temp_lines[0][0] * point[0] + temp_lines[0][1];
temp_bbox1_point.push_back(point);
for (int i = 0; i < 3; i++)
{
point[0] = (temp_lines[i][1] - temp_lines[(i + 1) % 4][1]) / (temp_lines[(i + 1) % 4][0] - temp_lines[i][0]);
point[1] = temp_lines[i][0] * point[0] + temp_lines[i][1];
temp_bbox1_point.push_back(point);
}


point[0] = (temp_lines[4][1] - temp_lines[7][1]) / (temp_lines[7][0] - temp_lines[4][0]);
point[1] = temp_lines[4][0] * point[0] + temp_lines[4][1];
temp_bbox2_point.push_back(point);
for (int i = 0; i < 3; i++)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值