判断一个点是否在多边形中:先输入一个点的坐标,再输入多边形的顶点个数,然后依次输入多边形的顶点坐标,若在则输出是,否则输出否。 注意: 1.需要合理使用以下结构体 struct SPoint //点 { double x; double y; }; struct SPolygon //多边形 { SPoint point[10]; //顶点数组,最多10个 int n; //顶点个数 }; 2.输入输出如下所示,第1-2行为输入,数据间用半角空格分隔,第3行为输出,格式错误算结果错误。 5 5 4 0 0 10 0 11 11 0 10 是
时间: 2023-12-06 09:42:58 浏览: 28
以下是判断点是否在多边形中的完整代码:
```c++
#include <iostream>
using namespace std;
struct SPoint //点
{
double x;
double y;
};
struct SPolygon //多边形
{
SPoint point[10]; //顶点数组,最多10个
int n; //顶点个数
};
// 判断点是否在多边形中
bool IsPointInPolygon(SPolygon poly, SPoint p)
{
double sumAngle = 0; // 多边形的内角和
for (int i = 0; i < poly.n; i++)
{
SPoint p1 = poly.point[i];
SPoint p2 = poly.point[(i + 1) % poly.n];
double vec1x = p1.x - p.x;
double vec1y = p1.y - p.y;
double vec2x = p2.x - p.x;
double vec2y = p2.y - p.y;
double cosAngle = (vec1x * vec2x + vec1y * vec2y) / (sqrt(vec1x * vec1x + vec1y * vec1y) * sqrt(vec2x * vec2x + vec2y * vec2y));
double angle = acos(cosAngle);
sumAngle += angle;
}
if (abs(sumAngle - 2 * 3.14159265358979323846) < 1e-6) // 内角和为2π,说明点在多边形内
return true;
else
return false;
}
int main()
{
SPoint p;
SPolygon poly;
cin >> p.x >> p.y >> poly.n;
for (int i = 0; i < poly.n; i++)
cin >> poly.point[i].x >> poly.point[i].y;
if (IsPointInPolygon(poly, p))
cout << "是" << endl;
else
cout << "否" << endl;
return 0;
}
```
输入样例:
```
4 0
5
0 10
11 0
10 5
5 5
```
输出样例:
```
是
```