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

标签 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 网格。并且需要简单的笛卡尔二维点来定义输出曲线。

最佳答案

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

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

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

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

这将为您提供所需的曲线集。

关于c++ - 从多边形网格创建地形二维曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35239198/

相关文章:

c++ - C++0x 中 allocator_traits<T> 的目的是什么?

c++ - QImage保存使用时返回false~

database - 用于搜索属性的数据库表的优化设计

javascript - 多种形状的 3D 网格

c++ - 使用 C++ 和 winsock 的蓝牙

c++ - 模板类的类型转换问题

c - 凸包中最大的三角形

algorithm - 事件图中的for循环

algorithm - 给定相对于球体的 X、Y 和 Z 向量,求出球体的自旋

3d - 计算 3D 空间中的视锥体