【发布时间】:2010-11-02 17:25:58
【问题描述】:
我有一个 3D 网格(体素),其中一些体素被填充,而另一些则没有。 3D 网格是稀疏填充的,所以我有一组 filledVoxels 带有填充体素的坐标 (x, y, z)。我要做的是找出每个填充的体素,也填充了多少相邻的体素。
这是一个例子:
- filledVoxels 包含体素 (1, 1, 1)、(1, 2, 1) 和 (1, 3, 1)。
- 因此,邻居计数为:
- (1,1,1) 有 1 个邻居
- (1,2,1) 有 2 个邻居
- (1,3,1) 有 1 个邻居。
现在我有这个算法:
voxelCount = new Map<Voxel, Integer>();
for (voxel v in filledVoxels)
count = checkAllNeighbors(v, filledVoxels);
voxelCount[v] = count;
end
checkAllNeighbors() 查找所有 26 个周围的体素。因此,我总共进行了 26*filledVoxels.size() 查找,这非常慢。
有什么方法可以减少所需的查找次数?当您查看上面的示例时,您可以看到我多次检查相同的体素,因此可以通过一些巧妙的缓存来摆脱查找。
如果这有任何帮助,体素代表一个体素化的 3D 表面(但其中可能有孔)。我通常想获取具有 5 或 6 个邻居的所有体素的列表。
【问题讨论】:
-
您可能应该添加一些有关填充体素数组中元素排序的信息。没有这些信息,回答这个问题只能基于猜测。
-
它并没有减少所需的查找次数,但您的问题看起来非常可并行。
标签: algorithm language-agnostic 3d voxels