凸边形满足
Pi Pi+1位于Pi-1 Pi的同一指针方向
要么都在顺时针方向,要么都在逆时针方向
凹变形不满足;
故判断凹凸只需要Pi Pi+1、Pi-1 Pi叉积的符号是否一致即可
代码:
#include<bits/stdc++.h>
using namespace std;
#define N 1000
struct point
{
int x,y;
point() {}
point(int _x,int _y)
{
x = _x;
y = _y;
}
point operator -(const point &b)const
{
return point(x - b.x,y - b.y);
}
//叉积
int operator ^(const point &b)const
{
return x*b.y - y*b.x;
}
//点积
int operator *(const point &b)const
{
return x*b.x + y*b.y;
}
//绕原点旋转角度B(弧度值),后x,y的变化
void transXY(int B)
{
int tx = x,ty = y;
x = tx*cos(B) - ty*sin(B);
y = tx*sin(B) + ty*cos(B);
}
};
bool pan(point p[],int n)
{
for(int i=0;i<n;i++)
{
if(((p[i]-p[(i+1)%n])^(p[(i+1)%n]-p[(i+2)%2]))<0)
{
return false;
}
}
return true;
}
point p[N];
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==0)break;
else
{
for(int i=0;i<n;i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
}
if(pan(p,n))
{
printf("convex\n");
}
else
{
printf("concave\n");
}
}
}
}