首页 > 解决方案 > 在空间网格中查找角点

问题描述

所以我一直在编写一些代码来从点云网格中获取地板。到目前为止,我已经获得了构成这个地板网格的三角形,但现在我想创建一个平面来覆盖这些点以表示一个平面地板。

地板网

好吧,只是为了让它更清楚一点。现在我有这个网格。(三角形、顶点和法线)。我想创建一个平面或类似的东西来覆盖这个网格来代表地板(因为这个地板不像实际地板应该那样平坦)。

它应该创建 1 个或多个平面来覆盖封装区域

我确实知道使用一个库来计算一个区域应该基于一些关键点。因此,如果我能够从网格中获取例如这些点(见下文),它将创建以下对象(见下文)。这也会给我想要的结果。

在下面 进一步

如果有人以前做过类似的事情或知道如何解决这个问题,我将非常感激:)。

(我正在使用 Unity 和 C# 顺便说一句)

关于这个网格最后要注意的一件事是,并不是所有的三角形都很好地相互连接。所以网格中间有一些点会突出一点。这使得检查三角形是否在拐角处变得更加困难。

标签: c#unity3dmeshhololens

解决方案


如果我正确理解您的问题,您实际上可能在创建点云网格方面做了太多工作,但无论如何这很酷。

如果您想要的只是地板所在的平面,那么您所拥有的就是一个近似问题;一个可以像您真正想要的那样简单或复杂。

最简单的路线: 你知道在这种情况下它是地板,所以你可以假设正常的 vec 是向上的(即Vector3.up),所以第 1 步是估计你的平面的 z 坐标。最简单的方法是平均点云中所有或部分点的 z 坐标。

现在您需要找到平面角的 x 和 y 坐标。最简单的解决方案是假设大多数房间都是矩形的,而您正在使用的房间也是如此。然后,您可以在任何方向(x 和 y 方向)上找到最远的点,并使用这些点创建一个矩形平面。

这当然不考虑地板的旋转(你可能不会站在完全垂直于墙壁的角度),这需要更多的思考。


推荐阅读