网格到网格交叉点

问题描述 投票:11回答:5

我正在寻找一个图书馆或一篇论文来描述如何确定一个三角形网格是否与另一个三角形网格相交。

有趣的是,我很空虚。如果有一些方法可以在CGAL中做到这一点,它就是在逃避我。

看起来它应该是可能的,因为三角形交叉是可能的,因为每个网格包含有限数量的三角形。但我认为必须有一种比明显的O(n * m)方法更好的方法,其中一个网格有n个三角形而另一个网格有m个三角形。

computational-geometry mesh surface triangulation
5个回答
8
投票

我们通常使用CGAL进行的方式是使用CGAL::box_intersection_d

你可以把这个example和这个one混合在一起。

编辑:

从CGAL 4.12开始,现在有CGAL::Polygon_mesh_processing::do_intersect()功能。


3
投票

本书Real-Time Collision Detection对实现这些算法有一些很好的建议。基本方法是使用空间分区或边界卷来减少需要执行的三元交叉测试的数量。

有很多很好的学术方案可以解决这个问题,包括Proximity Query PackageGAMMA research group at University of North Carolina,SWIFT,I-COLLIDE和RAPID的其他工作都是众所周知的。检查这些库上的许可证是否可接受。

开放动力学引擎(ODE)是一个物理引擎,它包含大量交集原语的优化实现。您可以在wiki上查看三角形 - 三角形相交测试的文档。

虽然它不是你想要的,但我相信CGAL也可以这样做 - Tree of Triangles, for Intersection and Distance Queries


1
投票

我认为您缺少的搜索词是叠加层。例如,这是Surface Mesh Overlay上的网页。该网站有一个简短的参考书目,全部由同一作者撰写。以下是关于该主题的另一篇论文:“Overlay mesh construction using interleaved spanning trees”,INFOCOM 2004:IEEE计算机和通信学会第二十三届年度联席会议。另见GIS SE问题,“Performing Overlay of Two Triangulated Irregular Networks (TIN)”。


1
投票

为了增加其他答案,还有涉及3D Minkowski和凸多面体的技术 - 凹多面体可以分解成凸面部分。看看this


1
投票

libigl中,我们将cgal的CGAL::box_intersection_dto与顶点V相交,并将F与另一个具有顶点U并面向G的网格相交,在IF中存储成对的交叉面作为行:

igl::intersect_other(V,F,U,G,false,IF);

这将忽略自我交叉。为了完整起见,我将提到我们还在一个单独的函数中支持自交叉:

igl::self_intersect(V,F,...,IF);
© www.soinside.com 2019 - 2024. All rights reserved.