Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics 如何知道一组点是否构成非凸形状?_Graphics_Three.js_Geometry - Fatal编程技术网

Graphics 如何知道一组点是否构成非凸形状?

Graphics 如何知道一组点是否构成非凸形状?,graphics,three.js,geometry,Graphics,Three.js,Geometry,我想在THREE.JS中对由一组2d点表示的多边形进行三角剖分。 我是否可以对2d点阵列进行测试,以确定这组点是凸面形状还是非凸面形状? 对于这种三角剖分,是否有一种最佳做法可以很好地适用于凸面和非凸面形状?假设您有一个由轮廓定义的二维形状,一个按CCW顺序排列的二维向量序列。如果所有连续边对形成左(逆时针)回路,则形状为凸形。您可以通过将两条边表示为三重点来验证这一点,然后调用leftOn(),如果给定了所述的left属性或点共线,则返回true function leftOn( a, b,

我想在THREE.JS中对由一组2d点表示的多边形进行三角剖分。 我是否可以对2d点阵列进行测试,以确定这组点是凸面形状还是非凸面形状?
对于这种三角剖分,是否有一种最佳做法可以很好地适用于凸面和非凸面形状?

假设您有一个由轮廓定义的二维形状,一个按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

中阅读关于这种方法的更多信息。你可以围绕任何点集构建凸包。当然,有些集合更好地用非凸跟踪来表示,比如阿尔法形状。这些点是有序的还是只是分散在空间中?对于散乱的点,查找多边形是非常不明确的。您可以围绕任何点集构建凸包。当然,有些集合更好地用非凸跟踪来表示,比如阿尔法形状。这些点是有序的还是只是分散在空间中?对于散乱点,查找多边形非常不明确。