从轮廓生成 2D 网格

Posted

技术标签:

【中文标题】从轮廓生成 2D 网格【英文标题】:Generate a 2D mesh from an outline 【发布时间】:2018-06-04 03:32:58 【问题描述】:

我得到了我想要生成的飞机的轮廓(点列表)。平面很大,我需要在轮廓内均匀分布顶点。每个顶点都有一个从红色到绿色的颜色值,以可视化平面中的一些数据。我需要尽可能精确地实时可视化数据。

我的想法是简单地创建一个网格并调整轮廓之外的所有顶点。事实证明这相当复杂。

这是我想要实现的一个简单示例。

有解决这个问题的算法吗? 还有其他方法可以从具有均匀分布顶点的轮廓生成网格吗?

【问题讨论】:

可以指定均匀的“分布顶点”是什么意思吗?具体来说,为什么不能在轮廓中随机分布顶点,进行点集三角剖分? 每个顶点都有一个从红到绿的颜色值,代表平面中的一些数据。数据在某些时候可能会发生很大变化。因此,随机分布的顶点可能会导致“盲点”,其中颜色只是从其他顶点插值而来,不显示实际数据。理想情况下,我可以影响两个顶点之间的距离。 我不明白您如何避免盲点。如果您采样更多点,您可以影响两个顶点之间的距离,对吧?基于网格的方法对随机抽样有何好处? 下面的方法怎么样:从轮廓中心的一个顶点开始,构建一个(粗略的)网格。然后,只要您想继续,您就可以在上一次迭代中的每个三角形上放置一个质心,并将其分成三个较小的三角形。 嗯,可以用于凸轮廓。不是一个理想的分布,但它可能已经足够好了。问题是我不知道轮廓的形状和大小(轮廓是由用户生成的)。 5 次迭代对于一个大纲来说可能是多余的,而对于另一个大纲来说是不够的。我会试一试,看看它的样子。 【参考方案1】:

虽然从问题中并不完全清楚,但我想到了适应二维的marching cubes algorithm。二维版的详细说明可以查看here。

【讨论】:

据我所知,行进立方体/正方形算法并不能解决问题。我真的不知道如何以一种可以理解的方式描述这个问题。【参考方案2】:

听起来你想做这样的事情:

1) 首先生成一个三角剖分您的多边形以创建一个网格。有很多选择:https://en.wikipedia.org/wiki/Polygon_triangulation

2) 然后,当网格中的任何边都太长(意味着两端的点可能相距太远)时,将最长边的中点添加到网格中,将相邻的三角形分成 2 个。

结果是一个网格,每个点都在每个方向上的其他点的有限距离内。生成的网格不一定是最佳的,因为它可能有比严格要求的更多的点,但它可能会满足您的需求。

如果您需要减少点数和细三角形,可以先应用 Delaunay Triangulation 在每个候选边上翻转:https://en.wikipedia.org/wiki/Delaunay_triangulation#Visual_Delaunay_definition:_Flipping

【讨论】:

【参考方案3】:

Delaunay 网格划分可以在形状内创建均匀分布的顶点。下图显示了组合的网格和 Delaunay 网格。你可以看看here。

【讨论】:

以上是关于从轮廓生成 2D 网格的主要内容,如果未能解决你的问题,请参考以下文章

投影3D网格的2D轮廓算法

时空地图TimeGIS.com生成正交曲线网格

如何删除 2D 矢量网格中的部分路径?

是否有有效的算法来生成 2D 凹壳?

平滑2D曲线

matlab中网格数据的绘制轮廓