用于在3D中找到最近三角形的数据结构

时间:2015-11-14 18:59:08

标签: c++ search kdtree

我有一组三角形,我想找到最接近空间任意点的三角形。

蛮力方法对我来说太慢了,所以我正在研究各种可以帮助加速搜索的数据结构。

我的问题是我所研究的结构(rtree,kdtree)使用边界框来缩小搜索范围,但是在很多情况下,最近的边界框不一定与最近的三角形相对应。

以下是一个这样的案例:

bbox example

注意蓝点如何最接近大边界框,但更接近小绿色三角形。这让我觉得依赖于边界框的数据结构会导致不正确的搜索结果...除非我遗漏了一些明显的东西?

总的来说,我正在寻找一个轻量级的c ++解决方案(所以没有CGAL或其他野兽包),或者只是指向我应该研究的正确算法。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用边界框方法缩小搜索范围。您需要做的就是以下内容:

  • 找到最近的边界框(假设它是您示例中的大边界)
  • 设r为点与最近边界框之间的距离,b为边界框的大小。找到距离点(r + b)更近的所有边界框。
  • 使用强力在剩余的边界框中找到最接近的三角形。

答案 1 :(得分:0)

我认为你可以使用Binary Space Partitioning来处理你所描述的更有效的尴尬案例。

基本上你有一些类似于k-d树的东西,你可以在任意平面上分割(通常基于场景中现有的一条边),而不是使用轴对齐的分割。

缺点是构建树的速度可能会慢一些。