凸多边形判断_[LeetCode] 469. 凸多边形
时间: 2023-12-03 18:02:29 浏览: 47
这是一个关于凸多边形判断的问题,可以使用叉积进行判断。对于一个凸多边形,任意两条相邻边的叉积符号应该相同,且所有边的叉积符号也应该相同。如果出现符号不同的情况,则说明该多边形不是凸多边形。
具体步骤如下:
1. 给定一个n个点的多边形,首先需要判断该多边形是否是凸多边形。
2. 对于相邻的两个边AB和BC,计算它们的叉积:(B.x-A.x)*(C.y-B.y)-(C.x-B.x)*(B.y-A.y)。
3. 如果叉积为0,则说明AB和BC共线,需要将BC作为下一条边进行计算。
4. 如果叉积为正数,说明AB到BC是一个左拐弯,需要保留BC作为下一条边进行计算。
5. 如果叉积为负数,说明AB到BC是一个右拐弯,说明该多边形不是凸多边形。
注意:在计算叉积时,需要注意精度问题,可以将叉积乘以一个较大的数进行处理,例如1000000,避免出现精度误差。
参考代码如下:
```
bool isConvex(vector<vector<int>>& points) {
int n = points.size();
long long pre = 0, cur = 0;
for (int i = 0; i < n; ++i) {
int dx1 = points[(i + 1) % n][0] - points[i][0];
int dy1 = points[(i + 1) % n][1] - points[i][1];
int dx2 = points[(i + 2) % n][0] - points[(i + 1) % n][0];
int dy2 = points[(i + 2) % n][1] - points[(i + 1) % n][1];
cur = dx1 * dy2 - dx2 * dy1;
if (cur != 0) {
if (cur * pre < 0) {
return false;
}
pre = cur;
}
}
return true;
}
```