从多边形网格创建地形2D曲线

时间:2016-02-06 08:59:16

标签: c++ algorithm 3d computational-geometry mesh

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

我以一定的精确间隔重复地与一个平面相交: enter image description here

enter image description here

enter image description here

等等。

enter image description here

虽然这在视觉上和CAD应用程序中都是直截了当的,但我完全没有以编程方式执行此操作。我怎样才能在编程环境中实现这一点/我可以通过哪些算法来实现这一目标?

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

1 个答案:

答案 0 :(得分:3)

一个选项是依次处理所有面,并为每个面确定遍历它们的水平面。对于给定的平面和面,依次检查所有四个顶点并找到符号的变化(Zvertex - Zplane)。将有两个这样的变化,定义属于水平曲线的边。 (特殊情况下,您可以找到四个符号更改,当小平面不是平面时会发生 - 成对加入点。)

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

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

对于给定的平面,使用哈希表,您可以跟踪从边到边的交叉链。

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