版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u79501/article/details/82632384
struct PolyPoint
{
double x;
double y;
PolyPoint(const double &_x, const double &_y) : x(_x), y(_y) {}
};
struct Polygon
{
std::deque<PolyPoint> points;
};
bool IsInPolygon(const Polygon &polygon, const PolyPoint &p)
{
int count = polygon.points.size();
if (count < 3) {
return false;
}
bool result = false;
for (int i = 0, j = count - 1; i < count; i++) {
PolyPoint p1 = polygon.points[i];
PolyPoint p2 = polygon.points[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;
}