这个问题可能有点抽象,它与任何图书馆或语言无关。
想象一下,3D空间中有一层节点,随机散布在假想的表面附近。
将这些节点组装成网格或灵活层的算法是什么,这样如果我们通过弹性反馈链接连接这些节点然后拉出一个节点,那么整个层开始弯曲和移动,而不是分解?
最简单的方法如下:将每个节点连接到其最近的6-10个节点。如果节点放置是常规的,这将起作用,但如果由于某种原因在节点中出现了漏洞。分布,边缘节点只能从一侧连接到最近的节点的机会。当您像这样拉动图层时,空洞开始增长,如两个不同球形图层的屏幕截图所示,两个图层都有洞:
那么:是否有算法选择N个节点连接给定节点,在3D空间中,这将阻止空洞的形成?如果已经形成了孔,那么只要节点之间的连接弹性拉动,那么算法是什么呢?
请注意,图层有"向上和向下"然后"左,右,前进,后退" 3D空间中的方向。 非常重要的是每个单元至少有一个左,右,前和后连接。然而,向上方向和向下方向也可以是空的。 我们可以假设六边形对称而不是立方,具有相同的想法。
我认为理想的连通单元组应该是来自给定单元的距离矢量之和尽可能接近零。然而,我甚至不能想到选择N个邻居的M个子集的多项式方法,因此他们的向量' sum尽可能接近零。如果直截了当地看起来像NP任务。
答案 0 :(得分:1)
这是基于我对您的问题的理解的想法:将3D空间切割为多个层,即x单位高,并将节点分类到这些层中。想象一下这个层在表面上是平的。让我们说,我们从底部开始,对于在相当大范围内没有节点的所有节点中的每一个:
从此节点开始。寻找它周围的一些节点。然而,当计算目标和我们的节点之间的距离时,它越接近平行于穿过起始节点的y轴的线,我们越多地补偿距离(使用像高斯分布这样的函数),更远的地方我们通过乘以一个大于一的因子来惩罚它。这样连接将是“方向性的”,但允许一定程度的偏差,具体取决于您在函数中设置常量的方式。将当前节点与具有最低“加权”距离的节点连接。对新节点重复此过程,直到节点在相当大的范围内没有位于其上方的节点。
现在切换轴,在这种情况下从左侧开始,并执行相同的操作。这取决于您如何编写“加权”功能,可以容忍不同程度的孔。一旦你完成了x轴和y轴,你就会有一个扭曲的网格。可能会有一些节点未连接,因为它们与其他所有节点都不友好,但您可以将它们连接到最近的4~6个节点或做类似的事情。
如果节点在3d空间中以球形方式分散,则可以在所有3轴上执行此过程:x,y和z。