Graphics 如何知道一组点是否构成非凸形状?
我想在THREE.JS中对由一组2d点表示的多边形进行三角剖分。 我是否可以对2d点阵列进行测试,以确定这组点是凸面形状还是非凸面形状?Graphics 如何知道一组点是否构成非凸形状?,graphics,three.js,geometry,Graphics,Three.js,Geometry,我想在THREE.JS中对由一组2d点表示的多边形进行三角剖分。 我是否可以对2d点阵列进行测试,以确定这组点是凸面形状还是非凸面形状? 对于这种三角剖分,是否有一种最佳做法可以很好地适用于凸面和非凸面形状?假设您有一个由轮廓定义的二维形状,一个按CCW顺序排列的二维向量序列。如果所有连续边对形成左(逆时针)回路,则形状为凸形。您可以通过将两条边表示为三重点来验证这一点,然后调用leftOn(),如果给定了所述的left属性或点共线,则返回true function leftOn( a, b,
对于这种三角剖分,是否有一种最佳做法可以很好地适用于凸面和非凸面形状?假设您有一个由轮廓定义的二维形状,一个按CCW顺序排列的二维向量序列。如果所有连续边对形成左(逆时针)回路,则形状为凸形。您可以通过将两条边表示为三重点来验证这一点,然后调用
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中阅读更多关于这种方法的内容,假设你有一个由轮廓定义的二维形状,一个按CCW顺序排列的二维向量序列。如果所有连续边对形成左(逆时针)回路,则形状为凸形。您可以通过将两条边表示为三重点来验证这一点,然后调用
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中阅读关于这种方法的更多信息。你可以围绕任何点集构建凸包。当然,有些集合更好地用非凸跟踪来表示,比如阿尔法形状。这些点是有序的还是只是分散在空间中?对于散乱的点,查找多边形是非常不明确的。您可以围绕任何点集构建凸包。当然,有些集合更好地用非凸跟踪来表示,比如阿尔法形状。这些点是有序的还是只是分散在空间中?对于散乱点,查找多边形非常不明确。