【问题标题】:How to know if a group of points makes a non-convex shape?如何知道一组点是否构成非凸形状?
【发布时间】:2019-02-20 02:28:06
【问题描述】:

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

【问题讨论】:

  • 您可以围绕任何点集构建凸包。当然,有些集合更适合用 alpha 形状等非凸跟踪来表示。
  • 这些点是有序的还是只是分散在空间中?对于散点,找到 a 多边形是高度模糊的。

标签: graphics three.js geometry


【解决方案1】:

假设您有一个由轮廓定义的 2D 形状,即 CCW 顺序的 2D 矢量序列。如果所有连续边对形成左(逆时针)回路,则形状是凸的。您可以通过将两条边表示为三个点来验证这一点,然后调用leftOn(),如果给出了提到的左侧属性或者这些点是共线的,则返回 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

【讨论】:

    猜你喜欢
    • 2020-03-20
    • 2022-01-23
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多