Диаграмма классов - оптимальное расположение узлов - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь построить средство просмотра модели диаграмм классов, используя d3.js и d3.dag

. Наиболее важной частью этого средства просмотра является то, что он должен иметь возможность оптимально позиционировать узлы, чтобы мы не моглииметь пересечение ссылок (когда это возможно) и плюс должен иметь возможность четко видеть, что с чем связано

Мы знаем:

  • Ширина каждого узла
  • Высота каждогоузел
  • Начальная координата связей
  • Конечная координата связей
  • Связывает все угловые координаты

Мы хотим:

  • Чтобы увидеть окончание соединений (может быть достигнуто путем перемещения узлов вручную) .

  • Чтобы свести к минимуму пересечение ссылок (если это возможно)

Мне нужно что-то вроде теории.

Есть ли какой-нибудь известный алгоритм, который может решить проблему выше (язык не имеет значения, мне просто нужна теоретическая справка)

Выкладываем примеры ниже

  • Чтотекущая ситуация
  • Чего я могу достичь самостоятельно
  • Что было бы идеально

Пример 1.

Текущий

enter image description here

Достижимый

enter image description here

Отлично

enter image description here

Пример 2.

Текущий

enter image description here

Достижимый

enter image description here

Идеальный

enter image description here

Пример 3.

Ток

enter image description here

достижимо и идеально

enter image description here

Пример 4.

Текущий

enter image description here

Достижимый

enter image description here

Отлично

enter image description here

Пример 5.

Текущий

enter image description here

Достижимый

enter image description here

Отлично

enter image description here

Пример 6.

Текущий

enter image description here

Идеальный

enter image description here

Обновление

Традиционное пересечение (соединение между узлами) в этом случае уже минимизировано (благодаря d3-dag).Проблема заключается в том, что у нас нет единственного отношения узла к узлу, у нас также есть отношение строки к строке, и в этом случае d3-dag терпит неудачу

1 Ответ

0 голосов
/ 24 февраля 2019

Я использовал d3-dag для топологической сортировки узлов , а затем переставил их по вертикали, сверху, если нечетный, и снизу, если даже

Хотя это не алгоритм, который я искал, он улучшилсявизуальный вид компонентов значительно увеличен и стал более читабельным

Старый enter image description here

Новый enter image description here

Старый enter image description here Новый enter image description here

Старый enter image description here Новый enter image description here

...