You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
1.7 KiB
C++

/**
* @file
* @brief calculate rectangle bounding box and minimal unregular bounding box for cluster
the rectangle bounding box can be inclined therefore it can better represent cluster
and vehicle direction,the result is stored as a clusterfeature in clusterFeatureArray
*
* @author Quanwen Zhu, Wuhan University, China
*/
#include <vector>
#include "veloslam/gridcluster.h"
using namespace std;
struct PointID
{
int cellIndex;
int pointIndexInCell;
};
struct BesiegePoint
{
double x;
double y;
double angle;
PointID pointID;
};
struct OrientedBoundingBox
{
double angle;
double length;
double width;
double circumference;
double area;
double newMaxXPointX;
double newMaxXPointY;
double newMaxYPointX;
double newMaxYPointY;
double newMinXPointX;
double newMinXPointY;
double newMinYPointX;
double newMinYPointY;
PointID boundingPointID[4];
};
class BoundingBox
{
public:
BoundingBox(void);
~BoundingBox(void);
void Initial(void);
double CalDirectionTwoPoints(double XPos1,double YPos1,double XPos2,double YPos2);
void CalCoordsAftRotation(double x,double y,double *newX,double *newY,double theta);
void CalAllBoundingBox( cluster &gluClusterData);
void CalBestRectangleBox(cluster &gluClusterData,clusterFeature &glu);
void CalMinBoundingBox(cluster &gluClusterData,clusterFeature &glu);
private :
bool calCandidateBox;
/**
* all rectangle bounding box candidates
*/
vector <OrientedBoundingBox> allCandBox;
/**
* unregular minBounding box points
*/
vector <BesiegePoint> minBoundingBox;
};