我开发了一个小程序,用户可以在其中创建带有通过线连接的抽象块的简单图,例如流程图或结构图。工作说明的其中一项是,线必须绕过其他图块\线,并且在移动时不得与它们相交。
插图
我尝试使用诸如 A * 或 Lee's算法之类的寻路算法,并考虑一个像图形一样的工作空间(带有图表元素的窗口)-一个像素就是一个图节点。但是,移动块\线会导致大量的时间延迟(例如,在大小为 500x500 的工作区中进行路径查找大约需要 320-360 ms )。对于那些算法来说,图表似乎太大了。
能否请您告诉我如何减少这种情况下的节点数?也许有一种方法可以加快这些算法的速度或为其使用其他功能?!
答案 0 :(得分:2)
不要将其视为图论问题,而应将其视为物理问题。
可视化如下。每个块都有特定的力将其拉到放置的最后位置。线段,块和图形的边缘通过平方反比彼此排斥(除了要绘制的线的末端不排斥其前面的块)。在足够的压力下,可以将线段分解为较小的线段,这些线段具有恢复直线的吸引力。
动力学很复杂,但是实体的数量是您在屏幕上看到的对象的数量,而不是绘制对象的像素数量。因此,您将能够相对快速地进行更新。
要获得良好的体验,您需要稍微进行一些动态调整,但这应该是更易于处理的方法。