我正在尝试将多边形 3D 网格转换为一系列地形曲线,这些曲线代表每个间隔的特定高度处的网格部分。到目前为止,我已经提出了将水平面与网格相交并获得相交曲线的想法。所以对于这个网格:
等等
虽然这在视觉上和在 CAD 应用程序中很容易完成,但我完全迷失了以编程方式执行此操作。我如何在编程环境中实现这一计算/我可以研究哪些算法来实现这一目标?
我正在 STL C++ 环境(使用 Boost)中编程,使用 this simple loader, 加载 .obj 网格。并且需要简单的笛卡尔二维点来定义输出曲线。
最佳答案
一种选择是依次处理所有面,并为每个面确定穿过它们的水平面。对于给定的平面和面,依次检查所有四个顶点并找到(Zvertex - Zplane)符号的变化。恰好有两个这样的变化,定义属于水平曲线的边缘。 (特殊情况下,您可以发现四个符号变化,当面不是平面时会发生这种情况 - 将点成对连接。)
每次找到交点时,都用平面的(唯一)索引和相交的边的(唯一)索引来标记它;您还可以使用与该面相交的另一条边的索引来标记它。
通过对平面索引进行排序,您可以对每个平面的交点进行分组。
对于给定的平面,使用哈希表,您可以跟踪从边到边的交叉链。
这将为您提供所需的曲线集。
关于c++ - 从多边形网格创建地形二维曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35239198/