【问题标题】:c++: CGAL 2D delauny triangulation: Concave Shapesc++:CGAL 2D delauny triangulation:凹形
【发布时间】:2010-12-22 09:23:21
【问题描述】:

我目前正在进入 CGAL 进行一些 2D 三角测量任务,并且我还准备了一些简单的工作。无论如何,我真的不知道如何对凹形进行三角剖分,因为现在我总是得到所有点的凸包。基本上我想在 mouseClick 上添加点,类似于它在 illustrator 中的工作方式,以便它们顺序中的所有点都是形状的轮廓。我怎么能用 CGAL 做到这一点?一般如何对凹形进行三角剖分的简单示例可能会让我走上正确的轨道!谢谢!

【问题讨论】:

    标签: triangulation cgal delaunay


    【解决方案1】:

    【讨论】:

    • 我认为问题在于对凹多边形进行三角剖分。上面的链接显示了凸多边形三角剖分。程序员也提到了上面的代码。如果您有任何算法可以解决具有孔的多边形的三角剖分,例如一个多边形,请分享。问题提交者还要求提供非凸多边形算法
    【解决方案2】:

    我猜你首先需要将partition 多边形变成凸块。在此之后,您可以使用以下内容创建每个单独多边形的三角形:

    for (int i = 1; i + 1 < polygon.size(); ++i) {
        const Point_2& v0 = polygon[0];
        const Point_2& v1 = polygon[i];
        const Point_2& v2 = polygon[i + 1];
    }
    

    【讨论】:

    • 嘿,我对此进行了调查,但无法真正让它发挥作用。难道不能用 constrained_delauny 三角剖分来创建凹形吗?如果是这样,有没有人有可用的例子?谢谢!
    • 为此使用 delaunay 三角测量似乎有点矫枉过正。 Delaunay 三角剖分最常用于对 2D 区域进行三角剖分(“网格化”),以便您可以使用有限元求解其上的各种偏微分方程。在这种情况下,您还会在该区域内创建许多额外的顶点。分区函数在什么情况下不起作用?
    【解决方案3】:

    如果你得到的是凸轮廓而不是凹轮廓,这可能是由于传入的 alpha 值。尝试使用 find_optimal_alpha(1) 作为 alpha 值或计算与你所在的点云的边界大小相关的值传入。例如。

    Alpha_shape_2 aShape(inPoints.begin(), inPoints.end());
    aShape.set_alpha( aShape.find_optimal_alpha(1) );
    aShape.set_mode(Alpha_shape_2::REGULARIZED);
    

    【讨论】:

      猜你喜欢
      • 2022-09-22
      • 2014-02-06
      • 2011-12-17
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 2021-11-10
      • 2016-04-23
      • 2018-08-13
      相关资源
      最近更新 更多