二维向量的叉乘判断凹凸多边形

向量叉乘判断凹凸多边形的问题
我在做一道题,题目的意思是按照逆时针的顺序给几个点的坐标,求这几个点围成多边形是凹的还是凸的.

我在网上看到了一个公式:

平面上三个点:p1(x1,y1),p2(x2,y2),p3(x3,y3)

s(p1,p2,p3)=(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3)

如果s>0 则说明 这连接这3个点时是按照逆时针的顺序,如果是s<0则说明连接这3个点是按照顺时针的顺序
这样的话按顺序的遍历每三个点,如果有小于0的说明有一条直线向右拐弯了如下图:



这样只要是有向右拐弯的的就说明这个多边形是凹多边形.

但是我不太明白为什么这样求,公式是怎么推导出来的...?这个好像叫向量叉乘

求各位大大解答

------解决方案--------------------
我觉得与sin角有关系,0-180度为正,180-360为负,多边形的内角少于180,则为凸;大于则为凹。剩下的可能就是数学问题。例如a²+b²-c²=2abcosC之类的...在用坐标系计算... 
------解决方案--------------------
当作空间上三个点:p1(x1,y1,0),p2(x2,y2,0),p3(x3,y3,0)

L31 = p3->p1 = [(x1-x3), (y1-y3),0]
L32 = p3->p2 = [(x2-x3), (y2-y3),0]

L31XL32 = [0,0,(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3)]  
相当于 L31XL32 = s(p1,p2,p3)=(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3)

这个向量积逻辑上的意义在于它的结果可以判断从L31 -> L32的转向是顺时针还是逆时针。
拿你的图为例:

点2 3 4的时候组成 L42, L43, 两个叉积可以用右手定则 L42转向L43 发现拇指是朝外的相当于是正值。
点3 4 5的时候组成 L53, L54,两个叉积右手定则 L53转向L54,可以发现拇指是朝内的相当于是负值。

这个作用相当于可以拿最后的那个点 去判断 在前面两个点组成的直线 的左边还是右边,进而得出到底是弯向哪一边。

个人理解,仅做参考。

你可能感兴趣的:(算法文章)