我正在尝试将多边形3D网格转换为一系列地形曲线,这些曲线表示每个间隔的特定高度处网格的一部分。到目前为止,我已经提出了将水平面与网格相交并获得交叉曲线的想法。所以对于这个网格:
等等。
虽然这在视觉上和CAD应用程序中都是直截了当的,但我完全没有以编程方式执行此操作。我怎样才能在编程环境中实现这一点/我可以通过哪些算法来实现这一目标?
我在STL C ++环境中编程(使用Boost),使用this simple loader,加载.obj网格,并需要简单的笛卡尔2D点来定义输出曲线。
答案 0 :(得分:3)
一个选项是依次处理所有面,并为每个面确定遍历它们的水平面。对于给定的平面和面,依次检查所有四个顶点并找到符号的变化(Zvertex - Zplane)。将有两个这样的变化,定义属于水平曲线的边。 (特殊情况下,您可以找到四个符号更改,当小平面不是平面时会发生 - 成对加入点。)
每次找到交点时,都会用平面的(唯一)索引和相交边的(唯一)索引标记它;您还可以使用该面中相交的另一条边的索引标记它。
通过对平面索引进行排序,您可以对每个平面的交叉点进行分组。
对于给定的平面,使用哈希表,您可以跟踪从边到边的交叉链。
这为您提供了所需的曲线组。