在3D空间中对非平面多边形进行三角剖分

时间:2014-05-07 09:12:15

标签: c# 3d geometry projection

我有一个有序的3D顶点列表,它形成一个多边形。

我希望将这些投影到2D平面上(作为三角测量的方法,然后计算它们的面积)。

我不完全确定怎么做这个,但有人有什么建议吗?

编辑:

我已经澄清了我遇到的真正问题的标题,并发布了我使用的相当具体的解决方案。它可能在某些时候对某人有所帮助,即使它有点利基。

2 个答案:

答案 0 :(得分:1)

我最终采用的解决方案,远非最佳解决方案,但它可能对某些人有所帮助:

  1. 首先采用您正在使用的多边形的轴对齐边界框(这可以通过获取您拥有的点集的每个x,y和z值的最大值和最小值来完成)。

  2. 将您所拥有的点投射到3个轴中的每个轴上,这些轴可以从边界框中获取。有关投影的帮助,我建议您:Projecting to a plane

  3. 从这里开始,我们现在有3个二维多边形。检查它们是否凸出,这可以通过取多边形中每个角的点积,对其进行标准化,并将其与其他角进行比较来完成,如果它们不是全部相同,则它不是凸的。

  4. 如果它们中的任何一个是凸的,选择一个并对其进行三角测量(我使用Triangle.NET)。你得到的积分指数将与你原来的积分相对应,为你提供功能性三角测量。

  5. 注意:

    这不是理想的,它并不总是有效(尽管在很多情况下会有效)。特别是如果多边形与自身重叠。

    一个更合适但仍然不理想的方法是最小边界框,但是这个方法要复杂得多。

答案 1 :(得分:-1)

虽然这不是很明显,但是多面体环完全指定了总表面矢量。只需选择一个点K,最好是在多边形顶点的凸包内(实际上不是必需的!但它有助于抑制舍入误差),并使用K作为集线器生成三角剖分。各个面向量的总和并不取决于K的选择。要投影到平面以生成实际的三角形曲面,可以使用F来定义该平面。