射线法实现:
bool pointInPolygon(Eigen::Vector2f point, std::vector<Eigen::Vector2f> polygonPeaks)
{
int n = polygonPeaks.size();
bool inside = false;
for (int i = 0, j = n - 1; i < n; j = i++) {
Eigen::Vector2f curPoint = polygonPeaks.at(i);
Eigen::Vector2f prePoint = polygonPeaks.at(j);
if ((curPoint.y() > point.y()) != (prePoint.y() > point.y()) &&
(point.x() < (prePoint.x() - curPoint.x()) * (point.y() - curPoint.y()) / (prePoint.y() - curPoint.y()) + curPoint.x()))
inside = !inside;
}
return inside;
}