c# - 在空间网格中查找角点
问题描述
所以我一直在编写一些代码来从点云网格中获取地板。到目前为止,我已经获得了构成这个地板网格的三角形,但现在我想创建一个平面来覆盖这些点以表示一个平面地板。
好吧,只是为了让它更清楚一点。现在我有这个网格。(三角形、顶点和法线)。我想创建一个平面或类似的东西来覆盖这个网格来代表地板(因为这个地板不像实际地板应该那样平坦)。
我确实知道使用一个库来计算一个区域应该基于一些关键点。因此,如果我能够从网格中获取例如这些点(见下文),它将创建以下对象(见下文)。这也会给我想要的结果。
如果有人以前做过类似的事情或知道如何解决这个问题,我将非常感激:)。
(我正在使用 Unity 和 C# 顺便说一句)
关于这个网格最后要注意的一件事是,并不是所有的三角形都很好地相互连接。所以网格中间有一些点会突出一点。这使得检查三角形是否在拐角处变得更加困难。
解决方案
如果我正确理解您的问题,您实际上可能在创建点云网格方面做了太多工作,但无论如何这很酷。
如果您想要的只是地板所在的平面,那么您所拥有的就是一个近似问题;一个可以像您真正想要的那样简单或复杂。
最简单的路线:
你知道在这种情况下它是地板,所以你可以假设正常的 vec 是向上的(即Vector3.up
),所以第 1 步是估计你的平面的 z 坐标。最简单的方法是平均点云中所有或部分点的 z 坐标。
现在您需要找到平面角的 x 和 y 坐标。最简单的解决方案是假设大多数房间都是矩形的,而您正在使用的房间也是如此。然后,您可以在任何方向(x 和 y 方向)上找到最远的点,并使用这些点创建一个矩形平面。
这当然不考虑地板的旋转(你可能不会站在完全垂直于墙壁的角度),这需要更多的思考。
推荐阅读
- powershell - PowerBI Invoke-PowerBIRestMethod 提取异常跟踪
- javascript - 如何使用 pubsub 模拟器在本地调用 firebase Schedule 函数
- enums - 枚举变体可以具有恒定的关联值吗?
- javascript - Swiper.js CDN 文件重命名和重大更改
- vba - #VBA - 运行时错误 - 2147352567 (80020009):无法解析条件。“(”处的错误
- javascript - 如何对齐 Material-UI 菜单项?
- php - 使用 Onesignal Api“附加数据”字段
- c++ - 在多显示器环境中计算 SendInput() 的归一化坐标
- regex - 正则表达式匹配) 在某些条件下
- r - 如何在 R 中使用可配置的移动平均线进行预测