/*一个没有重复点、逆时针的多边形是凸的充分必要条件是:
从第三个点开始,所有的点都在前两个点线段的左边,或者共线。
如果不事先去除重复点,而且不分逆顺时针,那么就是下面的算法。 */
//这个函数判断点c在线段ab的左边还是右边,
//如果返回值大于0在左边,如果小于0在右边,否则共线
double left_right(point a,point b,point c)
{
a.x-=c.x; a.y-=c.y;
b.x-=c.x; b.y-=c.y;
return a.x*b.y-a.y*b.x;
}
bool is_tu(point *p,int n)
{
if(n<4) return false;
double a,b;
a = left_right(p[0],p[1],p[2]);
for(; ++p,--n>2; a=b){
b = left_right(p[0],p[1],p[2]);
if(a*b<0)
return false;
}
return true;
}