有没有已经证明有效的数据结构,可以用于在四面体网格中进行点定位,其中四面体都是不相交但“相互接触”的?即大多数面都是正好两个四面体的面。
通过“定位”,我指的是要找出给定点位于哪个四面体中,或者如果它不在任何四面体中,则确定它不在任何四面体中。
到目前为止,我尝试过:
1. 一个简单的KD-Tree。这对我的需求来说太慢了,因为平均树深度非常高,每个叶子节点仍然需要测试许多单独的四面体。
2. 包含每个单元格中所有相交四面体的网格。这似乎效果要好得多,但仍然不够快。首先,网格包含了很多空单元格,因为我的整个网格不是非常“盒状”。其次,大多数实际包含四面体的单元格,都包含了很多四面体(10+)。我想这是因为许多四面体共享每个顶点,一旦一个顶点在一个单元格中,它的所有相邻四面体也会在其中。
关于输入数据的一些进一步信息:该网格通常不是凸的,可能具有孔或包含物。虽然后两个情况不太可能发生,但我必须处理它们,这使得“行走”变得不可能(需要昂贵和复杂的预处理)。
通过“定位”,我指的是要找出给定点位于哪个四面体中,或者如果它不在任何四面体中,则确定它不在任何四面体中。
到目前为止,我尝试过:
1. 一个简单的KD-Tree。这对我的需求来说太慢了,因为平均树深度非常高,每个叶子节点仍然需要测试许多单独的四面体。
2. 包含每个单元格中所有相交四面体的网格。这似乎效果要好得多,但仍然不够快。首先,网格包含了很多空单元格,因为我的整个网格不是非常“盒状”。其次,大多数实际包含四面体的单元格,都包含了很多四面体(10+)。我想这是因为许多四面体共享每个顶点,一旦一个顶点在一个单元格中,它的所有相邻四面体也会在其中。
关于输入数据的一些进一步信息:该网格通常不是凸的,可能具有孔或包含物。虽然后两个情况不太可能发生,但我必须处理它们,这使得“行走”变得不可能(需要昂贵和复杂的预处理)。