首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Matlab计算三维空间中点到三角剖分的距离

用Matlab计算三维空间中点到三角剖分的距离
EN

Stack Overflow用户
提问于 2013-08-14 19:16:21
回答 2查看 2.8K关注 0票数 2

我有一个三维点云,我已经使用Matlab的函数DelaunayTri将其转换为Delaunay三角剖分。现在我在3D中有了一个测试点,并想在Matlab中计算这个点和三角剖分之间的最小距离。

到目前为止,我已经考虑过使用nearestNeighbor(...)成员函数,在三角剖分中找到离测试点最近的点,然后计算它们之间的距离。这是一些东西,但这不是我真正想要的。

通常,三角剖分上离我的测试点最近的点不是三角剖分的顶点,而是三角形面上的某个地方。我怎样才能找到这一点?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-08-14 20:34:26

我已经为这些东西写了代码,但它们不在文件交换上。我可以说服他们通过直接邮寄的方式分发。

找到凸包的距离相对容易,但不是微不足道的。delaunay细分无论如何都是由凸包限定的。因此,您可以很容易地将细分转化为凸包,或者只使用凸包。请注意,对于许多目的,凸包通常是一个非常差的近似值,特别是当您将其用于颜色映射时,这可能是我看到的最常见的情况。在这种情况下,alpha形状是更好的选择。Alpha形状也将有一个三角化的边界表面,尽管通常它不是凸的。

因此,要在凸三角剖分上找到最近的点:

  1. 转化为凸边界曲面,即凸包。这简化为找到那些不在成对的四面体之间共享的三角形。内部面将始终在所有面的列表中恰好出现两次。当然,此技巧也适用于非凸面细分,因此对于alpha shapes.
  2. Compute,每个三角形曲面面都有一个边界外接圆。这使您可以知道何时停止检查镶嵌面。
  3. 获取到曲面上每个点的距离。按到每个面中最近点的距离对每个面进行排序。首先从列表中最近的面开始。
  4. 计算到步骤3中找到的明显最近的面的距离。通过最小距离编程找到一个简单的解决方案,它可以转换为约束线性最小二乘。劳森和汉森对此有一个算法。

重复步骤4,直到当前找到的最佳距离小于该距离,将其与步骤2中的任意外接圆进行比较。此循环将非常短,至少对于凸壳是如此。对于来自alpha形状的更一般的非凸面外壳,可能需要更多时间。

您还可以通过从搜索中排除远离相关点的面来减少搜索空间。使用这些小平面法线进行此测试。

票数 0
EN

Stack Overflow用户

发布于 2015-10-02 21:09:42

我为这个问题写了工具point2trimesh。这是一种“蛮力”解决方案,也适用于非凸面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18230259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档