83 lines
1.7 KiB
C
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;
|
||
|
|
||
|
};
|