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

实现矩形间正交连接器:如何生成‘感兴趣水平/垂直线段’?

嘿,我来帮你拆解一下这篇论文里的“感兴趣水平/垂直线段”怎么落地,结合你的C#代码来捋清楚思路~

搞定正交连接器的“感兴趣线段”:从论文到代码实现

先搞懂论文里的“感兴趣线段”是什么

论文里的**水平感兴趣线段(HSIs)和垂直感兴趣线段(VSIs)**其实就是画布上矩形边界里,能作为正交连接器路径“锚点”或“转折点”的线段——简单说,就是矩形的四条边(以及后续可能合并/筛选后的有效线段,先从基础的矩形边开始):

  • 水平感兴趣线段(HSIs):每个矩形的上下两条边,是连接器可以水平附着或转向的基础线段
  • 垂直感兴趣线段(VSIs):每个矩形的左右两条边,对应垂直方向的锚点/转向线段

这些线段是后续生成正交路径的核心基础——连接器的路径只会在这些线段的端点或交点上转折,保证全程只有水平、垂直方向的正交走向。

结合你的C#代码生成这些线段

你的代码已经在往图里添加矩形的四个顶点了,接下来只需要把这些顶点连成线段,就能得到最初的HSIs和VSIs。补全后的代码大概是这样:

foreach (var item in this.AllItems.OfType<DesignerItemViewModel>())
{
    #region Boundaries
    // 先定义矩形的四个顶点
    Point topLeft = new Point(item.Left, item.Top);
    Point topRight = new Point(item.Left + item.Width, item.Top);
    Point bottomLeft = new Point(item.Left, item.Top + item.Height);
    Point bottomRight = new Point(item.Left + item.Width, item.Top + item.Height);

    // 添加顶点到图结构中
    graph.AddVertex(topLeft, null);
    graph.AddVertex(topRight, null);
    graph.AddVertex(bottomLeft, null);
    graph.AddVertex(bottomRight, null);

    // 生成水平感兴趣线段(HSIs):矩形的上下两条边
    // 这里假设你的graph类有专门添加线段的方法,如果没有可以用AddEdge并标记类型
    graph.AddHorizontalSegment(topLeft, topRight);
    graph.AddHorizontalSegment(bottomLeft, bottomRight);

    // 生成垂直感兴趣线段(VSIs):矩形的左右两条边
    graph.AddVerticalSegment(topLeft, bottomLeft);
    graph.AddVerticalSegment(topRight, bottomRight);
    #endregion
}

下一步:基于这些线段生成正交路径

有了HSIs和VSIs之后,你就可以按照论文里的算法继续推进:

  1. 构建线段之间的连接关系:比如,一条HSI和VSI的交点,就是可以转向的节点
  2. 用最短路径算法(比如Dijkstra)找到从起点矩形边到终点矩形边的最优正交路径
  3. 后续还可以优化路径,比如去掉多余的转折点,避免路径交叉等

如果之后在路径生成阶段遇到问题,随时可以再细化讨论~

内容的提问来源于stack exchange,提问作者Ondra Rada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:10:35