多边形判定是凸多边形还是凹多边形
double left_right(CPoint a, CPoint b, CPoint 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;
}
//返回true为凸多边形,false为凹多边形
bool IsConvex( )
{
//我测试的为5边形
int n = 5;
double eps = 1e-10;
CPoint array[12];
if (n == 0 || n == 1 || n == 2 || n == 3) return false;
for (int i = 0; i < n; i++)
{
//将需要构成多边形的点放在array中
array[i].x = xx;
array[i].y = xx;
}
double a, b;
a = left_right(array[0], array[1], array[2]);
for (int i = 0; i + 2 < n; i++)
{
//测试最后一个点
if (i == 0)
{
b = left_right(array[n - 1], array[0], array[1]);
if (a*b<0)
return false;
}
b = left_right(array[i + 0], array[i + 1], array[i + 2]);
if (a*b<0)
return false;
//测试倒数第二点
if (i == n-3)
{
b = left_right(array[i + 1], array[i + 2], array[0]);
if (a*b<0)
return false;
}
}
return true;
}