我有一个 3D 网格(体素),其中一些体素被填充,而有些则没有。3D 网格是稀疏填充的,所以我有一组filledVoxels
填充体素的坐标 (x, y, z)。我要做的是找出每个填充的体素,也填充了多少相邻的体素。
这是一个例子:
- fillVoxels 包含体素 (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 个邻居的所有体素的列表。