Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7

Алгоритм построения линий графа на плоскости с автоматическим обходом препятствий

25.03.2024, 07:04. Показов 2698. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пример прикреплён. В нём линии связей пересекают таблицы, хотелось бы, чтобы автоматически обходили. Куда глянуть? Или как формулировать вопрос яндексу?
Миниатюры
Алгоритм построения линий графа на плоскости с автоматическим обходом препятствий  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2024, 07:04
Ответы с готовыми решениями:

Поиск библиотеки для прокладки ортогональных линий пути от А до Б и обходом прямоугольных препятствий !
Buongiorno :senor: Ребят, видел ли кто - нибуть или есть у кого - то на примере кроссплатформенная библиотека прокладки пути? Ну вот...

Алгоритм преследования движущейся цели в режиме реального времени с обходом препятствий
Здравствуйте. Недавно задался вопросом написания небольшой мини-игры на тему выживания. Игра заключается в следующем: есть небольшое поле с...

Рекурсивный поиск максимального пути по матрице с обходом препятствий
Есть поле 8x8, есть некая допустим змея длиннющая, на все 64 клетки. Она вылезает на точку 0;0 и ей нужно по максимуму проползти всё поле...

37
Эксперт функциональных языков программированияЭксперт по математике/физике
4315 / 2106 / 432
Регистрация: 19.07.2009
Сообщений: 3,215
Записей в блоге: 24
27.03.2024, 15:09
Студворк — интернет-сервис помощи студентам
Рисунок похож на graphviz. https://graphviz.org/docs/layouts/dot/ (есть исходники)

А тем временем я запрототипировал и похоже, что Алексей таки прав, одной электростатики недостаточно для того, чтобы исключить пересечения линии.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,116
Записей в блоге: 2
27.03.2024, 16:33
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Вот что я пока придумал. Но тут надо ещё проверять.
Может стоит подумать над структурой данных "линия"
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
27.03.2024, 16:39  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
Может стоит подумать над структурой данных "линия"
Да с ней я, как раз, определился - либо кубический параметрический сплайн дефекта 1, либо сплайн Акимы.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,116
Записей в блоге: 2
27.03.2024, 19:42
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Да с ней я, как раз, определился - либо кубический параметрический сплайн дефекта 1, либо сплайн Акимы.
Возможно Вы смотрели какую-то статью со списком сплайнов. В приложениях/редакторах что изучал я реально используется один: кубический сплайн Безье. Остальные так, для комплекта или дань истории. Практически все они достижимы тем же Безье, а главное - он имеет прекрасный интерактивный контроль, начиная с "авто", т.е. по минимуму, нужно только добавить точки, остальное на автомате. А можно и "раздуть" управление (кривизной) как душе угодно. В общем, как говорят, "рекомендую"

Ну и займитесь кривыми/сплайном, это по-любому надо делать, а там, глядишь, и какие-то идейки с "авто-обходом" созреют
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
27.03.2024, 22:01
Есть какое-то ограничение на таблицы? На картинке 2 ряда таблиц. Может быть 5 рядов ("строк") таблиц?
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
27.03.2024, 23:25  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
Ну и займитесь кривыми/сплайном, это по-любому надо делать
Они у меня сделаны, я давно ими пользуюсь для своих задач.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Есть какое-то ограничение на таблицы? На картинке 2 ряда таблиц. Может быть 5 рядов ("строк") таблиц?
На таблицы нет никаких ограничений. Предполагается, что их можно перемещать онлайн, при этом все связи должны отвечать условиям задачи.
Миниатюры
Алгоритм построения линий графа на плоскости с автоматическим обходом препятствий  
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
27.03.2024, 23:33  [ТС]
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Они у меня сделаны,
***
Миниатюры
Алгоритм построения линий графа на плоскости с автоматическим обходом препятствий  
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,116
Записей в блоге: 2
28.03.2024, 00:17
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Они у меня сделаны, я давно ими пользуюсь для своих задач.
Ну и хорошо. Тогда почему не реализовать что Вы предложили в #17? Пытаемся соединить по прямой. Находим первый что "пересекли", пытаемся его "обойти" назначив точку около угла и.т.д. Понятно получите какие-то новые проблемы - но тогда и новые мысли придут.

Метод "сделать и посмотреть" (да, без всякого плана, мат моделей и.т.п.) отнюдь не плох, тем более здесь это не накладно по реализации
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
28.03.2024, 00:29  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
Тогда почему не реализовать что Вы предложили в #17?
Это задача перспективная, не первоочередная. Пока здесь собираю разные варианты.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
28.03.2024, 09:57
Расширьте прямоугольники - сделайте им "теней" - чтобы линии огибали их не вплотную.
Попробуйте уже имеющие связи тоже окружить запретными зонами. Это предположение, я не знаю к чему это приведет, но попробовать можно.
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
28.03.2024, 10:09  [ТС]
Да, тоже думал об этом.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
28.03.2024, 16:53
Что с ответом на вопрос в сообщении #9?

И еще: придумайте несильно перегруженный хороший примерчик. Нарисуйте нам.

Добавлено через 38 минут
Теорема: для любой топологии можно всегда провести любые две пары линий связи так, чтобы они пересекались не более 1 раза.
Доказательство: если две линии пересекаются два раза, то участок от пересечения до пересечения можно исправить так, чтобы они шли параллельно, не пересекаясь, при этом пересечения устранятся. При этом очевидно, преимущество такой параллельной прокладки: если одна линия проходит "красиво", то и вторая будет тоже "красивой".

Пользуясь этой теоремой, можно строить менее запутанные связи.
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
29.03.2024, 05:21  [ТС]
Цитата Сообщение от Mikhaylo Посмотреть сообщение
прямоугольники будут сверху над связью B-E, а какие - снизу.
Что значит "сверху" и "снизу"? Связи могут идти и вертикально.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
29.03.2024, 18:29
Линию связи можно рассматривать как дорогу, по которой едешь из дома А в дом Б, а слева или справа находятся другие дома. Это то же самое, что если нарисовать квадратики и линии связи и тогда "лево-право" превращается "вверх-вниз".

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

При этом я уточню формулировку. Надо рассматривать всю эту сеть как граф с вершинами и дугами. Сначала найдём все простые петли в графе. Под простыми петлями я понимаю замкнутые контуры, не имеющие вложенных петель. Нужно определить, будет ли каждая вершина находиться внутри такой петли или снаружи. Соответственно, у каждой линии в петле будет внутренняя и наружная сторона. И теперь гораздо более четко понятно, что значит - определить, по какую-сторону линии находится квадратик.

Если мы пробежимся по всем петлям и как-то определим, внутри или снаружи находится каждый квадратик, то мы получим топологию графа. По топологии графа можно определить, в каком направлении нужно вести каждую линию связи относительно квадратиков.

Вопрос лишь в том, как получить оптимальную топологию. Но это гораздо более простая задача нежели та, которую вы перед собой поставили...
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
30.03.2024, 06:34  [ТС]
Всё равно не очень понятно.
То есть, всё что вы пишете, оно, вроде бы, логично, но алгоритма в этом не просматривается.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
30.03.2024, 07:44
Я примерно понимаю, что за ПО вы создаёте. Я бы на вашем месте сделал интерактивный режим отрисовки: пользователь сам определяет, как идут линии, либо просит оптимизировать автоматически. Сплайны - это отстой, лучше квадратно-гнездовой способ реализовать, когда линии связи строго горизонтально или вертикально, с поворотами на 90 градусов.

Предлагаемый алгоритм состоит из двух частей: первая часть - это получение оптимальной топологии графа на поверхности, вторая часть - это реализация топологии в конкретных координатах.

Первая часть.
1. Находим все дуги, которые не входят в петли.
2. Находим неповторяющиеся петли графа до тех пор, пока каждая дуга не окажется хотя бы в составе одной из петель.
3. Для каждой петли определяем местонахождение каждой вершины (внутри/снаружи). Для этого мы делаем полный перебор. При переборе находим наилучший вариант, с минимумом пересечений дуг.

Вторая часть.
1. У нас фиксированы начало и конец дуги. Используем квадратно-гнездовой способ. Определяем, в какую сторону надо двигаться, исходя из того, откуда выходит дуга (обычно влево или вправо). Шаг сетки 5 мм, поэтому первый кусочек 5 мм готов.
2. Определяем, какая сторона у дуги внутренняя, какая наружная в составе петли или же дуга без петли, у нее нет сторон.
3. Если дуга в составе петли, то перебираем все вершины и смотрим по координатам, требуется ли разворот и обход этой вершины, если же таких вершин нет, то мы просто двигаемся в направлении конечной вершины, предпочитая движение в том же направлении как и в предыдущем шаге.
4. Дуги беспетельные могут обходить вершины как угодно, с любой стороны.
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
30.03.2024, 07:58  [ТС]
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Сплайны - это отстой, лучше квадратно-гнездовой способ реализовать
Ну, во-первых, я хочу именно сплайны.
Во-вторых, ваш алгоритм излишне сложный, с отсутствием гарантии, что он безошибочный.
И, предлагаю такой вариант, если интересно - я сделаю контрольный пример, а вы "скормите" его вашему алгоритму, и посмотрим, что будет.
И, да, повторюсь - решение этой задачи мне нужно, но не горит.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
30.03.2024, 09:28
Сплайны не проблема. Проблема в другом: этот алгоритм вполне рабочий, но может не устроить решение. А еще вы можете внести 1000 усовершенствований. То есть описал некое направление, а не конкретный алгоритм.
Эх, и зря же вы сказали, что "не горит".)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.03.2024, 09:28

Алгоритм построения прямых линий Брезенхема (Visual Studio)
Всем привет! Подскажите, пожалуйста, как реализовать "Алгоритм построения прямых линий Брезенхема" (в OpenGL и Visual Studio) ? Я...

Алгоритм построения планарного графа
День добрый. Я довольно долго искал по просторам интернета алгоритм построения планарного (или, кому как проще, плоского) графа. Не нашел....

Алгоритм построения графа с n вершинами, степень КАЖДОЙ из которых k
Здравствуйте, помогите пожалуйста с данной проблемой, меня не интересует код, меня интересует сам алгоритм. Мне нужно представить в виде...

Алгоритм построения остовного дерева графа методом поиска в глубину
Помогите реализовать алгоритм построения остовного дерева графа методом поиска в глубину. Алгоритм должен возвращать остовное дерево...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru