hdu 2108 (用叉积判断图形)

#include<stdio.h>
struct Node
{
int x,y;
}s[10000];

//两个向量叉积公式:
//(x1,y1)X(x2,y2)=x1*y2-x2*y1
//aXb = |a|*|b|*sin(c) 当C大于180°,叉积值小于0.
int f(int i,int j,int k)
{
int a;
a = (s[j].x - s[i].x ) * (s[k].y - s[i].y) - (s[k].x - s[i].x) * (s[j].y - s[i].y);
if(a > 0) //大于0,两个向量见得夹角小于180;
return 1;
else
return 0;
}

// x1 = s[j].x - s[i].x;
// y1 = s[j].y - s[i].y;
// x2 = s[k].x - s[i].x;
// y2 = s[k].y - s[i].y;

int main()


{
int n,m,j,i,k;
int flag;

while(~scanf("%d",&n))
{
flag = 0;
if(n == 0)
break;
for(i = 0;i < n ;i ++)
{
scanf("%d %d",&s[i].x,&s[i].y );
}
if(n <= 3)
{
flag = 1;
}
else if(n > 3)
{
s[n] = s[0];
s[n + 1] = s[1];

for(i = 2;i < n + 2;i ++)
{
if(!f(i,i + 1,i + 2))
{
flag = 0;
break;
}
}
if(i == n)
flag = 1;
}
if(flag)
printf("convex\n");
else
printf("concave\n");
}
return 0;
}

posted @ 2016-10-27 18:48  谨言-hcy  阅读(110)  评论(0编辑  收藏  举报