在图节点之间绘制线条有哪些好的算法?

App*_*ood 19 algorithm graphics drawing graph

什么我专门拼杀是不是图的只是布局,但是当用户选择一个图节点,并开始拖动它在屏幕方面,该行必须不断被重绘,以反映它会是什么样子,如果在用户是要释放节点.我想这是布局算法的一部分?

另外一些应用程序有点花哨,并不是简单地以良好的弯曲方式绘制线条,而是以几乎直角弯曲方形节点周围的线条.请参阅附图,请记住,当拖动一个节点时,该线被绘制为行进的蚂蚁,并在保留其弯曲样式的同时重新排列.

alt text http://img260.imageshack.us/img260/5458/nodesr.png

Ben*_*ier 8

如果你的图表不是疯狂的,你不应该需要一个额外的算法,但只是使用一些常识.

  1. 用矩形网格覆盖表面,然后找到一种方法连接到具有最小角度的网格线的直线框:如果框不在同一网格线上而您不关心连接的位置,则需要如果中间没有其他节点,则为一个角度.如果在路上有例如节点,则至少需要一个角度.

  2. 作为更全面的图表的第二步,添加代码不仅可以优化最小数量的边缘,还可以最小化线条的长度.如果您的图表没有疯狂,那么在应用程序响应方面应该很难注意到.

  3. 考虑到两条腿的长度并检查表面上其他物体的交叉点,以获得额外的眼睛糖果.我会使用90°的圆圈并调整圆圈的半径(显然不是上面所做的) - 对于较长的腿,半径应该更大.也许你正在使用的工具包可以在这里帮助你.

  • @gpilotino:标准A*算法,使用hanan网格,角度过渡权重更高.您可以使用标准顶点/边缘图形(而不是A*的特殊情况版本,在搜索时记住方向)模拟角度过渡,方法是为每个点设置两个节点,一个用于水平,一个用于垂直,并使用高重叠节点之间边缘的权重. (2认同)