📜  门| GATE-CS-2006 |问题 23(1)

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

问题介绍

本题来自于GATE计算机科学2006年的考试,要求设计一个程序,通过输入图形的描述,判断图形是否为凸多边形。接下来将介绍该问题的详细描述、输入输出格式以及参考代码。

问题描述

给定一个n(n<=100)个点的凸多边形,其顶点按照逆时针方向给出。请设计一个程序,判断该多边形是否凸型,即他是否所有内部的角都不超过180度。请勿使用三角剖分或其他任何算法来分割多边形。

输入输出格式

输入格式:

  • 第1行,一个正整数n(n<=100),表示凸多边形的顶点个数。
  • 第2~n+1行,每行2个实数,表示凸多边形的顶点坐标(x,y),保留1位小数。

输出格式:

  • 若该多边形为凸多边形,则输出“Convex”,否则输出“Not Convex”。

参考代码

def cross(u, v):
    return u[0]*v[1] - u[1]*v[0]

def is_convex(points):
    n = len(points)
    for i in range(n):
        u = (points[(i+1)%n][0] - points[i][0], points[(i+1)%n][1] - points[i][1])
        v = (points[(i+2)%n][0] - points[(i+1)%n][0], points[(i+2)%n][1] - points[(i+1)%n][1])
        if cross(u, v) < 0:
            return "Not Convex"
    return "Convex"

以上是一个简单的python实现,首先定义一个cross函数用于计算叉积。接着定义一个is_convex函数,对每个相邻三角形计算叉积,并判断是否小于0。如果存在叉积小于0的情况,则说明该多边形不是凸多边形,返回"Not Convex"。最后,如果所有的叉积都大于等于0,则说明该多边形是凸多边形,返回"Convex"。

以上是本题的详细介绍,希望对程序员们有所帮助。