📜  门| GATE IT 2006 |问题13(1)

📅  最后修改于: 2023-12-03 15:28:40.317000             🧑  作者: Mango

门 | GATE IT 2006 | 问题13

简介

这是一个关于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表示输入的多边形的点集,返回值为判断结果。