如何知道一组点是否为非凸形状?

时间:2018-09-15 15:27:17

标签: graphics three.js geometry

我想在THREE.JS中用一组2d点表示的多边形进行三角剖分。 我是否可以对二维点的数组进行测试,以判断该组点是凸形还是非凸形? 对于这种三角剖分,是否有最佳实践,既适用于凸形也适用于非凸形?

1 个答案:

答案 0 :(得分:3)

假定您具有由轮廓定义的2D形状,则按CCW顺序排列2D向量序列。如果所有成对的连续边都形成左(逆时针)电路,则形状为凸形。您可以通过将两个边表示为三点来验证这一点,然后调用leftOn(),如果给出了上述left属性或点是共线的,则返回true。

function leftOn( a, b, c ) {

    return area2( a, b, c ) >= 0;

}

function area2( a, b, c ) {

    return ( ( c.x - a.x ) * ( b.y - a.y ) ) - ( ( b.x - a.x ) * ( c.y - a.y ) );

}

您可以在以下内容中了解有关此方法的更多信息: C语言中的计算几何,Joseph O'Rourke