一、凹凸多边形定义
因为凸多边形刚好定义,所以还是先看凸多边形的定义,凸多边形(Convex Polygon)可以有以下三种定义:
- 没有任何一个内角是优角(Reflexive Angle)的多边形。
- 如果把一个多边形的所有边中,有一条边向两方无限延长成为一直线时,其他各边都在此直线的同旁,那么这个多边形就叫做凸多边形。
- 凸多边形是一个内部为凸集的简单多边形。
简单多边形的下列性质与其凸性等价:
1、所有内角小于等于180度
2、任意两个顶点间的线段位于多边形的内部或边上
3、多边形内任意两个点,其连线全部在多边形内部或边上
可以发现:
- 所有的正多边形都是凸多边形
- 所有的三角形都是凸多边形。
不是凸多边形的,就是凹多边形,所以判断一个多边形的凹凸性,就判断其中一种就行。
二、凹凸性判断
对于一个多边形,一定可以知道多边形所有的点在平面内的位置,有可能是有序的,有可能是无序的。
多边形的点有序
1. 连续叉乘法
叉乘 可以用来判断两个向量在空间中的位置关系,在平面内的多边形,我们有它的有序点集,比如 A 1 A 2 A 3 . . . A n A_1A_2A_3...A_n A1A2A3...An,通过 A 1 A 2 ⃗ × A 2 A 3 ⃗ \vec{ A_1A_2 } \times \vec{ A_2A_3 } A1A2×A2A3,我们可以知道这三个点的走势,只需要记录叉乘的符号即可,接着继续算 A 2 A 3 ⃗ × A 3 A 4 ⃗ \vec{ A_2A_3 } \times \vec{ A_3A_4 } A2A3×A3A4,依次类推,只要有一次叉乘出来的结果符号和之前的不对,就是凹多边形,如果直到最后多是同样的符号,那么就是凸多边形。
多边形的点无序
1. 凸包法
一个凸多边形的点,是全部位于这个点集的凸包之上的,也就是说:如果一个多边形的点集计算出来的凸包点个数和这个多边形点个数一样多,那么它就是凸多边形,否则就是凹多边形。
计算凸包有很多方法,具体可以查看计算凸包的博客:待填入。