📅  最后修改于: 2023-12-03 15:42:16.368000             🧑  作者: Mango
本题来自于GATE计算机科学2006年的考试,要求设计一个程序,通过输入图形的描述,判断图形是否为凸多边形。接下来将介绍该问题的详细描述、输入输出格式以及参考代码。
给定一个n(n<=100)个点的凸多边形,其顶点按照逆时针方向给出。请设计一个程序,判断该多边形是否凸型,即他是否所有内部的角都不超过180度。请勿使用三角剖分或其他任何算法来分割多边形。
输入格式:
输出格式:
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"。
以上是本题的详细介绍,希望对程序员们有所帮助。