判断是否为凸多边形
所有内角都在(0, 180)的多边形为凸多边形(Convex),否则为凹多边形(Concave)。
顶点顺序逆时针
顶点顺序顺时针
判断依据
凸多边形,邻边向量的叉乘结果均为同号,均为正或均为负;
凹多边形,邻边向量的叉乘结果有正有负;
//是否为凸多边形 public static bool IsConvexPolygon(Vector2[] polygon) { int len = polygon.Length; float firstCross = 0; for (int i = 0; i < len; ++i) { var a = polygon[i]; var b = polygon[(i+1) % len]; var c = polygon[(i+2) % len]; var ba = a - b; var bc = c - b; float cross = V2Cross(ref ba, ref bc); if (0 == i) firstCross = cross; else if (firstCross * cross <= 0) //叉乘结果有异号就是凹多边形 return false; } return true; }
参考
【计算几何】凸多面体重叠判断算法:GJK 算法详解 & C++代码实现二维情形的凸多边形重叠判断_gjk算法-CSDN博客