从多边形网格创建地形二维曲线

Create Topographic 2D Curves from Polygonal Mesh

我正在尝试将多边形 3D 网格转换为一系列地形曲线,这些曲线代表每个间隔的特定高度处的网格部分。到目前为止,我已经想出了将水平面与网格相交并获得相交曲线的想法。所以对于这个网格:

我会以设定的精度间隔重复地与平面相交:

等等

虽然这在视觉上和在 CAD 应用程序中很简单,但我完全无法以编程方式执行此操作。我怎样才能在编程环境中实现这个计算/我可以研究什么算法来实现这个?

我在 STL C++ 环境(使用 Boost)中编程,使用 this simple loader, 加载 .obj 网格并且需要简单的笛卡尔二维点来定义输出曲线。

一个选项是依次处理所有面,并为每个面确定穿过它们的水平面。对于给定的平面和面,依次检查所有四个顶点并找到符号的变化(Zvertex - Zplane)。将恰好有两个这样的变化,定义属于水平曲线的边缘。 (在特殊情况下,您会发现四个符号变化,这发生在小平面不是平面时 - 将这些点成对连接。)

每次找到交点时,都用平面的(唯一)索引和相交边的(唯一)索引标记它;您还用与该面相交的另一条边的索引标记它。

通过按平面索引排序,您可以按平面对交叉点进行分组。

对于给定的平面,使用散列 table,您可以从边到边跟踪交叉链。

这为您提供了所需的一组曲线。