具体实现
头文件:
#ifndef ISPOINTINPOLYGON_H
#define ISPOINTINPOLYGON_H
#include <QObject>
#include "ExtendStructure/Include/Vector3D.h"
#include <vector>
class CIsPointInPolygon
{
public:
CIsPointInPolygon();
~CIsPointInPolygon();
/**
* @fn IsPointInPolygon
* @brief 判断一个点是否在区域内
* @param
* @return
*/
bool IsPointInPolygonNew(const CVector3D& v2DList, const std::vector<CVector3D>& vec3D);
private:
};
#endif // ISPOINTINPOLYGON_H
源文件:
#include "IsPointInPolygon.h"
#include "ExtendStructure/Include/Vector3D.h"
#include <vector>
CIsPointInPolygon::CIsPointInPolygon()
{
}
CIsPointInPolygon::~CIsPointInPolygon()
{
}
bool CIsPointInPolygon::IsPointInPolygonNew(const CVector3D& p, const std::vector<CVector3D>& vec3D)
{
int count = vec3D.size();
if(count < 3)
{
return false;
}
bool result = false;
for(int i = 0, j = count - 1; i < count; i++)
{
CVector3D p1 = vec3D.at(i);
CVector3D p2 = vec3D.at(j);
if(p1.x < p.x && p2.x >= p.x || p2.x < p.x && p1.x >= p.x)
{
if(p1.y + (p.x - p1.x) / (p2.x - p1.x) * (p2.y - p1.y) < p.y)
{
result = !result;
}
}
j = i;
}
return result;
}