判断点是否在多边形内 c++代码
时间: 2024-01-15 18:05:35 浏览: 103
下面是判断点是否在多边形内的 C++ 代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
struct Point {
int x, y;
};
// 判断点p是否在闭合多边形poly内
bool isInsidePolygon(Point p, vector<Point> poly) {
int n = poly.size();
bool inside = false;
for (int i = 0, j = n - 1; i < n; j = i++) {
if (((poly[i].y > p.y) != (poly[j].y > p.y)) &&
(p.x < (poly[j].x - poly[i].x) * (p.y - poly[i].y) / (poly[j].y - poly[i].y) + poly[i].x)) {
inside = !inside;
}
}
return inside;
}
int main() {
// 多边形顶点坐标
vector<Point> poly = {{0, 0}, {0, 4}, {4, 4}, {4, 0}};
Point p = {2, 2}; // 测试点
if (isInsidePolygon(p, poly)) {
cout << "点在多边形内" << endl;
} else {
cout << "点不在多边形内" << endl;
}
return 0;
}
```
其中,`isInsidePolygon` 函数接受一个点 `p` 和一个多边形 `poly`,返回一个布尔值,表示点是否在多边形内。函数内部使用射线法判断点是否在多边形内。具体而言,从点 `p` 向右发射一条射线,若与多边形的边相交的次数为奇数,则点在多边形内,否则点在多边形外。
阅读全文