В этом примере: http://bl.ocks.org/mbostock/1747543:Избегайте столкновений между узлами и ребрами в D3 силы макете
... Майк показывает нам, как избежать столкновения между узлами, так что никакие два узла не накладываются друг на друга.
Интересно, можно ли избежать столкновения между узлами и ребрами, чтобы никакие «клипы» узла не перекрывали или не перекрывали ребро, если он не связан этим ребром.
В следующем примере с помощью D3 силы-прямых показывает, что узел L
перекрывается с краем соединительной I
и A
, и аналогично, узел M
перекрывается с краем соединительной L
и D
. Как предотвратить такие случаи?
Это невозможно при реализации компоновки силовых установок в D3. Вам нужно будет реализовать это самостоятельно. Обратите внимание, что на самом деле это очень сложная проблема (вычислительно), поэтому, даже если у вас была реализация, она, вероятно, не захочет запускать ее в браузере. –
@ LarsKotthoff, вы говорите, в общем, ни один известный алгоритм построения графа (в том числе реализованный для D3) не может эффективно решить эту проблему? – skyork
Это зависит от вашего определения. Найти (статическое) решение для этого звучит как минимум NP-сложно для меня. Это не значит, что его можно быстро решить в конкретных случаях, но в целом это сложно (и для больших графиков вы, вероятно, не можете сделать это быстро). Чтобы затем изменить это начальное решение таким образом, чтобы узлы двигались незначительно (по мере того, как будет выполняться симуляция), это будет очень просто, поскольку вам нужно только выполнить локальный ремонт. –