一个判断凹凸多边形的题目。
利用叉积的公式:
A(X1, Y1), B(X2, Y2), C(X3, Y2)
AB * AC = (X2 - X1) * (Y3 - Y1) - (X3 - X1) * (Y2 - Y1)
如果 > 0 三点成逆时针
如果 = 0 三点在一条直线
如果 < 0 三点成顺时针
#include <stdio.h>
struct node
{
int x;
int y;
}n[1100];
int get(int a, int b, int c)
{
int s = (n[b].x - n[a].x) * (n[c].y - n[a].y) - (n[c].x - n[a].x) * (n[b].y - n[a].y);
//printf("%d\n", s);
return s;
}
int main (void)
{
int num;
while(scanf("%d", &num))
{
if(num == 0)
break;
for(int i = 0; i < num; i++)
scanf("%d %d", &n[i].x, &n[i].y);
bool f = 0;
for(int i = 0; i < num; i++)
{
if(get(i % num, (i + 1) % num, (i + 2) % num) <= 0)
{
f = 1;
break;
}
}
if(f != 1)
printf("convex\n");
else
printf("concave\n");
}
return 0;
}