You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Graphviz中设置A->D边轨迹,绕B上C下且不与节点相交?

解决Graphviz中A->D边绕B上、C下且不与节点相交的问题

可通过以下方式实现需求,无需手动计算曲线与节点的交点,同时保证边不穿过节点、箭头方向正确:

改进代码

graph [splines=polyline]; # 需平滑曲线则改为splines=bezier
    A [pos="0,0!", shape=star];
    B [pos="100,0!", shape=circle];
    C [pos="200,0!", shape=circle];
    D [pos="300,0!", shape=box];

    A -> D [
        pos="0,100 150,100 150,-100 300,-100",
        tailclip=true,
        headclip=true
    ];
}

核心要点

  • 移除原代码中手动指定的边起止点(s,0,0、e,300,0及首尾节点中心坐标),仅保留中间轨迹控制点,让Graphviz自动计算边与节点边界的交点
  • splines=polyline生成折线轨迹,splines=bezier生成平滑曲线轨迹,按需选择
  • tailclip和headclip(默认值为true)确保边被自动裁剪到节点边界,避免穿透节点
  • 编译命令不变:neato -n2 -Tpng tmp.dot -o tmp.png

生成的图中,A->D边会从A上方出发,绕B上方后向下绕C下方,最终连接到D下方,完全不与节点相交,箭头方向符合预期。

内容的提问来源于stack exchange,提问作者Филя Усков

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:13:11