判断多边形凹凸性
原创
©著作权归作者所有:来自51CTO博客作者wx63864a6559994的原创作品,请联系作者获取转载授权,否则将追究法律责任
描述
任意给定一个多边形,判断它是凸还是凹。多边形的顶点以逆时针方向的序列来表示。
输入
输入包含多组测试数据,每组数据占2行,首先一行是一个整数n,表示多边形顶点的个数,然后一行是2×n个整数,表示逆时针顺序的n个顶点的坐标(xi,yi),n为0的时候结束输入。
输出
对于每个测试实例,如果地块的形状为凸多边形,请输出“convex”,否则输出”concave”,每个实例的输出占一行。
样例输入
4
0 0 1 0 1 1 0 1
0
样例输出
convex
#include<iostream>
using namespace std;
typedef struct
{
int x,y;
}node;
int del(int x1,int x2,int y1,int y2)
{
return x1*y2-x2*y1;
}
int fun(node x,node y,node z)
{
return del(y.x-x.x,y.y-x.y,z.x-y.x,z.y-y.y);
}
int main()
{
int n;
node p,q,a,b,c;
while(cin>>n&&n)
{
int flag=1;
if(n<3)
{
int e,w;
for(int i=0;i<n;i++)cin>>e>>w;
cout<<"convex"<<endl;
continue;
}
cin>>p.x>>p.y;
cin>>q.x>>q.y;
a=p;
b=q;
for(int i=2;i<n;i++)
{
cin>>c.x>>c.y;
if(fun(a,b,c)<0)flag=0;
a=b;
b=c;
}
if(fun(a,b,p)<0)flag=0;
if(fun(b,p,q)<0)flag=0;
if(flag)
cout<<"convex"<<endl;
else cout<<"concave"<<endl;
}
return 0;
}