📅  最后修改于: 2023-12-03 15:28:40.317000             🧑  作者: Mango
这是一个关于GATE IT 2006问题13的介绍,问题13是一个程序设计题,要求实现一个函数来检测一个给定的图形是否是凸多边形。
给定一个凸多边形的n个顶点的坐标,设计一个程序来判断该多边形是否凸多边形。
判断凸多边形可以通过判断相邻顶点的夹角来实现。如果夹角小于180度,那么就是凸多边形,否则为非凸多边形。
#include <iostream>
using namespace std;
bool isConvex(vector<pair<int, int>>& points) {
int n = points.size();
bool hasPositive = false, hasNegative = false;
for (int i = 0; i < n; i++) {
int dx1 = points[(i+2)%n].first - points[(i+1)%n].first;
int dy1 = points[(i+2)%n].second - points[(i+1)%n].second;
int dx2 = points[i].first - points[(i+1)%n].first;
int dy2 = points[i].second - points[(i+1)%n].second;
int crossProduct = dx1 * dy2 - dx2 * dy1;
if (crossProduct > 0) {
hasPositive = true;
} else if (crossProduct < 0) {
hasNegative = true;
}
if (hasPositive && hasNegative) {
return false;
}
}
return true;
}
其中,vector<pair<int, int>> points
表示输入的多边形的点集,返回值为判断结果。