【发布时间】:2012-08-12 01:48:40
【问题描述】:
对于四面体网格中的点位置是否有任何经过验证的数据结构,其中四面体都是不相交但相互“接触”的? IE。大多数面恰好是两个四面体的面。
位置我的意思是我想找出给定点位于哪个四面体中,或者它是否不位于任何四面体中。
到目前为止,我已经尝试过:
一个简单的 KD 树。这对我的需求来说太慢了,因为平均树深度非常高,而且我仍然有很多单独的四面体要在每片叶子上进行测试。
一个网格,其中包含每个单元格的所有相交四面体。这似乎工作得更好,但仍然不够快。首先,网格包含很多空单元格,因为我的整体网格不是很“四四方方”。其次,实际上确实包含四面体的大多数细胞确实包含很多(10+)。我想这是因为很多四面体共享每个顶点,一旦一个顶点在一个单元格中,它的所有相邻四面体也是。
有关输入数据的一些进一步信息:网格通常不是凸面的,可能有孔或夹杂物。虽然最后两个不太可能,但我必须处理它们,这使得如果没有(昂贵且复杂的?)预处理,“行走”是不可能的。
【问题讨论】:
-
您是否尝试过以下操作(找不到参考,所以我简要介绍一下)?从任意的tet开始。确定一个面,相对于该点位于 tet 之外(与第四个 tet 顶点相对的一侧)。踩在脸的另一侧的tet上。再检查一遍。如果没有这样的面孔,那么重点就在当前的春节。该算法适用于凸网格。它符合您的需求吗?
-
另一个想法。您可以结合使用这两种方法。找到正确的网格单元后,就可以用上面的方法寻找正确的tet了。
-
听起来不错。当然,您可以通过用“空”四面体填充凹面来使其适用于非凸网格?
-
可能,尽管填补这些漏洞可能很困难。但是,如果您愿意,不妨试一试。
-
也许interval tree,在您的情况下,定位较少数量的四面体进行测试。深度可能类似于 KD-Tree。
标签: algorithm computational-geometry