可以有效地找到连接的组件(例如,如u_seem_surprised所述)。这将列出所有可能的连接链接。不幸的是,这个列表很长-任何一个组件中的任何节点都可以连接到其他任何节点,甚至哪个组件最好连接也不清楚。从这么长的列表中很难找到满足您非交叉需求的链接。
我怀疑对于这种混合问题,没有任何已知的最佳算法。相反,我建议您尝试一些自然的启发式方法。
最好的启发式方法将取决于问题的特征(例如,很少的组件和很多的节点,反之亦然)。但是这是我正在考虑的一种启发式方法的可能示例。
为了找到要在任何两个连接的组件之间链接的节点,我建议您首先尝试从组件A中最接近组件B中质心的节点。我认为可以使用空间索引来有效地做到这一点。然后,您可以再次使用索引尝试将该节点连接到组件B中最近的节点。
检查两个链接是否交叉的算法非常简单。
为了确定要连接的组件,我认为您可以尝试以下操作:
为每个组件的质心创建一个带有节点的新图形。将新的完整网格添加到新图中,链接长度等于质心之间的距离。在此新图上找到这些质心之间的最小生成树。现在,沿着最小生成树连接组件。
但是,此算法可以告诉您连接无法连接的组件(例如,想象一个由三个同心组件组成的图形-您将无法将外部连接到内部)。因此,这只能是启发式建议。
最好始终将一个组件连接到具有最近节点的另一个组件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句