Как реализовать алгоритм построения линии с обходом препятствий?

В нашей компании разрабатывается программа, которая позволяет строить блок-схемы. Моей задачей является создание алгоритма построения линий, соединяющих элементы схемы и при этом необходимо минимизировать пересечение линий с другими линиями и блоками. То есть, если линия встречает на своем пути, например, блок, она должна его обойти и идти дальше.

Я попытался приспособить для этого pathfinding алгоритмы A* и волновой алгоритм Ли и принял 1 пиксель = 1 узел графа, но при большом размере схемы (например, 1000x1000 дает миллион узлов графа) алгоритмы тормозят (500x500 обрабатывается за 300-500 мс в зависимости от выбранного алгоритма).

Подскажите пожалуйста, как можно реализовать данную функциональность для линий? Подумывал об использовании более эффективных реализаций A* - HPA* или JPS, но, мне кажется, использовать pathfinding алгоритмы для этой цели нерационально и есть более простой и эффективный метод решения.
  • Вопрос задан
  • 1316 просмотров
Пригласить эксперта
Ответы на вопрос 3
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Алгоритм плоской укладки графов: здесь
2. Иерархический подход для автоматического размещения ациклических графов: здесь

Должно это помочь: https://flowchart.js.org/
Ответ написан
Комментировать
longclaps
@longclaps
Копай в сторону graph drawing algorithms.
Ответ написан
Комментировать
alex-1917
@alex-1917
Если ответ помог, отметь решением
делали что-то похожее - сетка 1000*1000,
можно выбрать область любого размера, например 20*49.
следующий выбор обрабатывается с учетом, чтобы не разрешать пересекаться с уже выбранными областями.
плюс выбор РАЗМЕРОВ, т.е. задаю размер - например, 1*4 - скрипт сам подбирает первое сверху место по вместимости среди уже выбранных областей.
там все ячейки хранились в БД, скрипт вытаскивал свободные и дальше безумные расчеты)))

если интересно, то поищу, просто так лазить в закромах нет никакого желания)))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы