顺着多边形的边往下
判断(比如是逆时针方向),如果新的点出现在上条边的右边,则肯定是凹的。
我以前写了个 判断所有顶点凹凸性的程序:
// 返回值:按输入顺序返回多边形顶点的凸凹性 判断,bc[i]=1,iff:第i个顶点是凸顶点
我以前写了个 判断所有顶点凹凸性的程序:
// 返回值:按输入顺序返回多边形顶点的凸凹性 判断,bc[i]=1,iff:第i个顶点是凸顶点
void checkconvex(int vcount,POINT polygon[],bool bc[])
{
int i,index=0;
POINT tp=polygon[0];
for(i=1;i <vcount;i++) // 寻找第一个凸顶点,最下的顶点肯定是
{
if(polygon[i].y <tp.y||(polygon[i].y == tp.y&&polygon[i].x <tp.x))
{
tp=polygon[i];
index=i;
}
}
int count=vcount-1;
bc[index]=1;
while(count) // 判断凸凹性,叉乘,实际上就是判断边的拐弯方向
{
if(multiply(polygon[(index+1)%vcount],polygon[(index+2)%vcount],polygon[index])> =0 )
bc[(index+1)%vcount]=1;
else
bc[(index+1)%vcount]=0;
index++;
count--;
}
}