На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Рисование связанных объектов на схеме
    Программа собрала информацию: что находится в локальной сети.
    Надо вывести на экран эту информацию наглядно в виде схемы (полная информация выводится в виде таблицы).

    Есть много объектов и часть из них (определенного типа: коммутатор) соединяется между собою.
    Берем такой коммутатор, у него есть N входов/выходов. Часть из них пустует (не выводиться), часть из них соединена с компьютерами (конечный объект), часть с другими коммутаторами, у которых такие же подобные соединения. На картинке показано, как это примерно выглядит.
    Есть объекты, которые не удалось соединить, могут быть любого типа: как отдельный объект/компьютер, так и коммутатор, где подключены компьютеры, но он сам ни к кому не подключен (кусок схемы)...

    Надо разместить объекты на схеме так, чтоб это было компактно и без пересечения линий и накладывания объектов друг на друга. И наверно, общая схема должна приближаться к квадратной, а не вытянутой в одну линию.
    Возможны упрощения: порядок соединений (выходящих линий из объекта) не обязательно по порядковому номеру, на них будет писаться нужный номер.
    Не задан ключевой/опорный объект: рисуется максимальная схема, где-нибудь пришлепком размещаются не соединенные маленькие схемы.

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

    Есть ли готовые алгоритмы для изучения?

    + На схеме (очень древняя) показаны только коммутаторы без конечных объектов...
    ++ Не исключается, что возможен функционал, когда некоторые элементы "зафиксированы", т.е. после автоматического размещения, руками по передвигал часть объектов.
    Прикреплённая картинка
    Прикреплённая картинка
    Сообщение отредактировано: Black_Dragon -
    MS Visual Studio 2019 (C++)
      Или вот не совсем древняя схема, тоже только коммутаторы без компьютеров.
      Прикреплённая картинка
      Прикреплённая картинка
      MS Visual Studio 2019 (C++)
        Хорошо, когда схема не имеет резервных/избыточных связей. Но в современных сетях резервирование со всякими STP да OSPF - обычное дело, а там без пересечений ну никак не построить...
        Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
        Есть претензии ко мне как к участнику? да ради бога.
        Не нравятся мои ответы? не читайте их.
        В общем, берегите себя. Нервные клетки не восстанавливаются.
          Подумала, на что это похоже. Вот на что.
          Экспертную систему просят объяснить, как был получен вывод. Трасса вывода - огромное дерево.
          Показывается схематично блоками. Щёлкнешь на блок - открывается подробная картинка этого блока.
          Наверно, и тут не надо вываливать всю картинку на плоскость, а делать хотя бы двухуровневую схему.
            Согласен с Akina'й - на 100% от пересечений не уйти, если не строить схемы в 3D :rolleyes:

            Но на счет частных решений - мысли есть ... Любая схема состоит из множества блоков и "под-схем". Блок - понятно, он одиночный, у него есть размеры и отступы для рисования связей. Чем больше связей - тем больше нужно отступов (как правило). А что такое "под-схема"? Тот же "блок", только гораздо большего размера, и в котором уже все внутреннее размещение составляющих предопределено. Ну и каков будет ваш алгоритм, если вот так вот подходить? ;)
            Мои программные ништякиhttps://majestio.info
              Akina
              У нас пока этого нет (чем выше офис, тем дольше все он делает)
              Но тут проблема не в схеме, а что удастся автоматически прочитать.
              Но в будущем не исключается. Тогда просто как-то более прилично раскидать.

              swf
              JoeUser
              Подсхемы не нужны, нужна именно развернутая схема.
              MS Visual Studio 2019 (C++)
                Как-то это хозяйство в концентрические окружности вписывать, а радиусы высчитывать.
                Тут есть корень дерева, центральная вершина, из которой все эти ветви растут? Её сделать центром.

                Далее, запускаем из корня поиск в ширину, считаем количество "соседей" первого уровня.
                Рисуем окружность такого радиуса, чтобы на окружности уместились все вершины 1-го уровня.
                Затем из каждой вершины первого уровня запускаем поиск в ширину, подсчитываем кол-во "соседей" второго уровня.
                Суммируем все вершины 2-го уровня, рисуем окружность подходящего радиуса, размещаем все вершины 2-го уровня.

                Делая радиус достаточно большим, всё разместим. Наверно :unsure:
                Сообщение отредактировано: swf -
                  Воспользуйтесь GraphViz. Ещё введение

                  Для него нужно будет подготовить текстовый файл, содержащий описание графа соединений
                  и параметры рисования узлов. Также можно указать предпочтительную раскладку (layout) и т.д.
                  Результат будет графическим файлом или файлом для специальных просмотрщиков (тут подробностей не помню)
                    swf
                    Цитата swf @
                    Её сделать центром

                    Все должно быть автоматически.
                    И желательно сделать так, чтоб при изменениях не колбасило схему. :D
                    В планах приделать опцию, чтоб объект(ы) можно было зафиксировать от последующих автоматических "перестановок".
                    Но схема нужна для быстрой наглядности и для последующего экспорта, для ручной правки в ставки в другие системы.

                    MBo
                    Спасибо, почитаю. Если там с открытым кодом, то попробую к себе внедрить.

                    Добавлено
                    +
                    Программа работает постоянно, и так же постоянно считывает "окружающею" информацию из локальной сети - типа эхо-локатор. Информация динамическая, но в основном связи статические, но есть такие проблемы, которые сказываются на автоматическом анализе:
                    1) Коммутатор может быть выключен (есть такие объекты с выключением на ночь)
                    - его перестают видеть
                    - выставленный интервал считывания информации - 15 минут (от последнего считывания), могут быть не стыковки
                    2) Проблема с электропитанием, отваливаются целые ветки
                    - перестают видеться куча коммутаторов
                    - выставленный интервал считывания информации - 15 минут (от последнего считывания), могут быть существенные не стыковки, например, после восстановления питания, согласно разному времени считывания информации, нарушиться цепочка связей.
                    3) WiFi-мосты, из-за которых связь между коммутаторами, которые они соединяют, на считывается.
                    - тут обычно один линк.
                    4) Долбанные коммутаторы, которые поставили подрядчики, не предоставляют информацию о связях.
                    - тут целые участки сети в неизвестном состоянии.

                    П. 4 вообще не решаемый для автоматического анализа, как физически там сделано, нам известно, и на нашей схеме нарисовано.
                    П. 3 как бы решаемый.
                    П. 1 и 2 могут вызвать временные не стыковки связей в период пока восстанавливается информация.


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

                    Добавлено
                    ++
                    Количество коммутаторов 320+
                    Количество всех объектов 2500+
                    (Да, и все это в одной сети. Один наш проект нам зарубили, другой, не наш, пока вяло текущий)
                    MS Visual Studio 2019 (C++)
                      Цитата Black_Dragon @
                      Подсхемы не нужны, нужна именно развернутая схема.

                      Ты немного не понял. Я расписал подход, как можно начать рисовать схему - просто рекурсивное вычисление и размещение элементов. Ну я бы так попытался начать. С пошаговым "разворачиванием" под-схем.
                      Мои программные ништякиhttps://majestio.info
                        JoeUser
                        :wacko:
                        Пока попробую поизучать чужую работу, потом буду думать.
                        Сообщение отредактировано: Black_Dragon -
                        MS Visual Studio 2019 (C++)
                          Цитата Black_Dragon @
                          приделать опцию, чтоб объект(ы) можно было зафиксировать от последующих автоматических "перестановок".

                          Объявляем некий уже построенный агломерат "супер-коммутатором" и оперируем им как единым объектом.
                          Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
                          Есть претензии ко мне как к участнику? да ради бога.
                          Не нравятся мои ответы? не читайте их.
                          В общем, берегите себя. Нервные клетки не восстанавливаются.
                          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script Execution time: 0,1082 ]   [ 18 queries used ]   [ Generated: 3.07.20, 23:16 GMT ]