【问题标题】:Detecting if multiple bent lines intersect检测多条弯曲线是否相交
【发布时间】:2013-07-15 06:37:50
【问题描述】:

我正在制作泳道图,但想不出一个好的算法来自动布置连接图中节点的线。我本质上想要的是这个。

但是,我现在没有任何防止线重叠或相交的保护措施,有时会变得非常混乱。

有没有人知道一种方法来检测一条线是否会与任何已经绘制的线相交? 我提出的一个想法是将路径存储在数组或表格中,并在每次计划绘制新行时检查整个表格,但这似乎效率不高。

我正在通过使用 GWT 在 javascript 和 java 中执行此操作,所以也许有一种简单的方法可以使用这些语言提供的工具之一来解决这个问题?

【问题讨论】:

  • this 之类的东西可能会有所帮助 - 另外,选择一种语言。 JavaScript 和 Java 在任何方面都不是一回事或相关...
  • 我可以用javascript和java编程。如果是 javascript,它将最终被包裹在 GWT 中的 JSNI 中(以便以后调试)。如果是 Java,那么 GWT 无论如何都会输出到 javascript。您提供的链接与我的问题并不真正相关,因为我没有检查线条是否与正方形相交。此外,我无法准确检查线是否通过坡度相交,因为这些线会弯曲。我可以将每条线分成几段,但是,这将非常乏味。我会把它保存为最后的手段。
  • 线交点是线交点,该示例专注于矩形和线交点的事实略有不相关,因为解决方案将其分解为线/线交点
  • 如果你正在构建一个与你展示的图片具有相同属性的图表,并且节点位置是预先确定的并且无法更改,那么应该有一个易于定义的方法绘制弯曲线以最小化交叉点的数量,因此甚至可能不需要检测交叉点(除非您想在交叉点上绘制小跳跃)。如果你可以最小化交叉点的数量,你还想检测它们吗?
  • 是的,我写这个的目的是一旦节点被绘制,它们就不能被移动。是的,我绝对可以最小化交叉路口和跳过交叉路口检测。你说的这个神奇的算法是什么? o__o

标签: java javascript algorithm svg charts


【解决方案1】:

如果您的真正问题是最小化线交叉点,有几种算法可以尝试在图表中完成此任务。以this link为例,auto routing for electric design automation中使用的算法也更多,也用于此类图表,如Lee algorithmA* Algorithm

我不知道你使用的工具是否有足够的灵活性来实现这种算法,通常你需要根据具体的图表类型来实现自己的启发式,但我希望这个链接足以给你好主意。

最小化图中的线交点是一个困难的 NP-Hard 问题,请查看this link (about the crossing number) 了解更多信息。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 2014-03-15
    • 2012-02-21
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多