我想检查一组 N 点是否描述了一个凸多边形
我想知道是否有一个好的算法?
以下是我想到的一些方法:
1.Convex Hull算法:
如果集合等于他的凸包,那么它是凸的。这种算法的复杂度为 O(n*LN(N))。但我觉得这就像在轮子上折断蝴蝶。
3.看角度:
然后我想检查两个连续向量的角度是否永远不会超过 180°。但由于我的点没有排序,我需要检查 3 个连续点的所有组合,这使得复杂度像 O(n3)。(应该有比这更好的方法)
例如,我尝试从右到左选择点,但结果并不总是预期的:
例如,在这种情况下,如果我从左到右,我会发现一个凸形:
所以对于这个解决方案,我可能需要一个好的算法来选择点。
3.看重心:
我认为检查所有 3 个连续点的重心是否在形状内会告诉我形状是否凸出。
这就是我的意思(G 是每个三角形的重心):
对于这个解决方案,我可以毫无问题地从左到右选择点。如果检查 G 是否在形状中的复杂度为 O(N),那么整体复杂度将类似于 O(N2)。
你能告诉我一个好的算法来解决这个问题或改进我正在考虑的解决方案吗
提前致谢