网格到网格交叉点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网格到网格交叉点相关的知识,希望对你有一定的参考价值。

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

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

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

答案

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

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

编辑:

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

另一答案

本书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

另一答案

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

另一答案

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

另一答案

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);

以上是关于网格到网格交叉点的主要内容,如果未能解决你的问题,请参考以下文章

交叉验证与网格搜索

交叉验证和网格搜索有啥区别?

如何在没有交叉验证的情况下运行网格搜索?

机器学习交叉验证和网格搜索

K-近邻算法交叉验证,网格搜索

我是不是需要同时执行网格搜索(使用交叉验证)和交叉验证方法?