问题:给定一个球体列表,找出所有被球体完全包围的空白空间。
细节:这是我正在研究的一个问题,我试图确定蛋白质中的空洞。我得到了组成蛋白质的原子列表((x,y,z)坐标和半径)。然后我运行我的算法,通过检查(给定半径的)探针是否可以放置在不与其他球体碰撞的位置来查找位于蛋白质边界内的所有空白空间。有两种类型的空间,空隙空间和空腔。空隙空间是可以通向蛋白质或位于蛋白质外部的空间。空腔是完全被蛋白质原子包围的空白空间。这是我们正在使用的样本“蛋白质”的图像。
在这里可以从三个维度来看。
在蛋白质的中心附近有一个空腔,你看到的穿过蛋白质的隧道将被认为是一个空隙空间,因为它没有被原子完全包围。
示例:给定一个包含 26 个原子的列表,这些原子在 3 维网格中从 (0,0,0) 到 (1,1,1) 均匀分布。每个原子的半径为 0.25,并位于任意轴上的 0、0.5 或 1 上。在点 (0.5, 0.5, 0.5) 没有原子。如果我们要绘制这些原子的 3D 图形,它将是一个没有中心的立方体形状。空腔将指定为 (0.5,0.5,0.5),半径为 0.25。可以假设这个空腔四面都是蛋白质。
示例图片:
请注意,以上只是立方体和蛋白质的二维表示。它实际上是 3D。
对于更大且形状不规则的原子组,如何确定空隙空间与空腔?
我正在考虑实现一个递归算法来检查每个方向以查看它是否可以达到图形的最大和最小边界,但我不确定这是否是正确的方法。
额外:是否有不同的算法会说示例中的空腔实际上是一个空隙空间,因为到达蛋白质外部的“路径”非常小?空腔必须完全被原子包围才能存在。任何具有通往蛋白质外部的路径(在任何方向,不一定是直的)的空隙都不会被视为空腔。