【发布时间】:2023-01-31 03:30:07
【问题描述】:
我正在寻找一种可以搜索 3D 数组并找出从单个点到数组的任何边缘的最快路径查找的算法。更具体地说,我正在检查 3 维空间内的空心结构是否“气密”,以及该结构内的某些东西是否有可能通过孔逃逸。任何人都可以推荐我可以阅读的关于这些东西的好资源、文档或文章吗?我不是在寻找特定的复制/粘贴解决方案,因为我真的很想了解它是如何工作的,但我的搜索结果一直很枯燥。
我也很有可能从一个完全错误的角度来处理这个问题,实际上需要改变我寻找这方面信息的方式,如果您有任何建议,请告诉我!
此外,3D 数组的最大大小为 [256,256,256],但其中的结构通常要小得多。此外,阵列中的每个元素都像一个空房间,每边有 6 面可能的墙。
我已经尝试搜索了一段时间,但我的大部分发现都是关于“最短路径”或“最小阻力路径”的不是我需要的。我想要计算成本最低检查我是否可以从结构内部到达外部的方法,即使它不是最短路径。
【问题讨论】:
-
当你说 3D 数组时,你是指 someint[i][j][k],还是只是一个 3D 向量 (x, y, z)?您如何定义结构的边和面?
-
@SimonGoater,我使用的是多维数组 [x,y,z] 而不是你建议的我认为是数组 [x][y][z] 的数组。数组的每个元素都将以空值开始,但用户可以添加一个块以在数组中构建“结构”。当用户放置一个块时,我想检查他们是否创建了一个“气密”的结构,以便我可以用空气填充内部元素。然而,有些块不是完美的立方体,因此每个块都有布尔值,表示每个面是否气密。
-
我仍然不确定你的意思。听起来你有一个类似 minecraft 的 256 个方块面的宇宙,在其中可以安排方块来制作“结构”。你想知道一个结构是否包含一个没有连接到“外部”的空隙,这样你就可以用“空气”块填充它,而不会使填充物流到各处。这是对您要执行的操作的准确描述吗?
-
@SimonGoater 是的,这是一个很好的描述。我在想我需要递归地填充空间并在边缘被击中时取消操作我已经想到了一些我可以完全避免操作的情况,但我主要只是在这里检查看看是否任何人都有更快的解决方案的建议。编辑:256 块阵列用于建造太空船,有点像太空工程师,如果这能让你更好地了解这个
-
我认为你必须尝试填充以查看它的去向是正确的。我的一个想法是使用结构块的最小和最大 x、y、z 值制作一个结构封装框,然后从该框的表面向内填充。这可以大大减少工作量。您需要从盒子表面的空块开始填充,当填充停止时,找到另一个并重复直到没有剩余,然后扫描内部是否有剩余的空隙,这些空隙必须是“密封的”。
标签: performance optimization multidimensional-array path-finding