|
5 / 1 / 2
Регистрация: 09.11.2013
Сообщений: 161
|
|
Как нарисовать граф, имея 2-мерную матрицу29.12.2013, 16:52. Показов 2916. Ответов 15
Метки нет (Все метки)
На входе есть двумерная матрица смежности, нужно по нему нарисовать сам граф. Как это сделать - не представляю. Ведь вершин может быть и пять, и сорок пять. Понимаю, что нужно сделать так чтобы ни одни любые три вершины не находились на одной прямой, подскажите как это можно сделать.
0
|
|
| 29.12.2013, 16:52 | |
|
Ответы с готовыми решениями:
15
Как нарисовать трёх-мерную модель Сформировать p-мерную матрицу A n-го порядка
|
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
| 30.12.2013, 13:41 | |
|
Программно нарисовать или на бумаге?
0
|
|
|
5 / 1 / 2
Регистрация: 09.11.2013
Сообщений: 161
|
|
| 30.12.2013, 16:32 [ТС] | |
|
Qwertiy, Прогамно, естественно) есть идея сделать алгоритм, который рандомом бы задавал положения вершин (т.е. координаты их на мониторе), а потом проверял, не находятся ли любые три из них на одной прямой и если находятся, то как нибудь изменял бы их. Но я не представляю как сделать эту проверку.
0
|
|
|
|
|||
| 31.12.2013, 16:32 | |||
Сообщение было отмечено как решение
РешениеВообще, по этому вопросу много есть литературы, хотя бы: http://ru.wikipedia.org/wiki/Визуализация_графов http://en.wikipedia.org/wiki/G... ut_methods Особо обратите внимание на Force-based layout и Circular layout. Последнее я Вам предложил выше: расположить точки по окружности. А силовой метод мне кажется наиболее симпатичным: сначала рандомно располагаем точки, потом в вершины помещаются заряды, а ребра мыслятся как пружинки, и вся эта система приводится в движение с диссипацией (трением), пока не займет устойчивое положение. Требует симуляции движения, но там законы не сложные и точность-то нам не особо важна.
4
|
|||
|
5 / 1 / 2
Регистрация: 09.11.2013
Сообщений: 161
|
|
| 31.12.2013, 16:49 [ТС] | |
|
Mysterious Light, Если и делать движение, то как нибудь потом. Т.к. делается это все на канве в делфи, с которой постоянные проблемы. А за идею с окружность спасибо, покурю на досуге)
0
|
|
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
||
| 03.01.2014, 20:38 | ||
0
|
||
|
5 / 1 / 2
Регистрация: 09.11.2013
Сообщений: 161
|
|
| 04.01.2014, 02:20 [ТС] | |
|
Qwertiy, Что то у меня наверное очередной затуп был... А можно какую нибудь статейку или еще чего по теме именно силовой реализации? Или хотя бы гуглопригодное название.
0
|
|
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
| 04.01.2014, 04:13 | |
|
Не искал... Вроде должно нормально гуглиться по чему-то вроде раскладки графов.
В общем, там идея простая. Берём и рассматриваем всё рёбра как одинаковые пружины, натянутые между шариками. От каждой такой пружины на шарик действует сила. Итерационным методом эмулируем перемещение. Стабилизировавшаяся система - это и есть раскладка. Чтобы не возникло колебаний, надо использовать затухание типа умножения на 0.9 на каждом шаге.
0
|
|
| 04.01.2014, 10:44 | |
Сообщение было отмечено как решение
Решение
Идея с системой которая "самобалансируется" конечно красивая. Когда-то делал немного подобное и удивительно как быстро наступает состояние равновесия. Но в данном случае - наверное нет т.к. могут быть длинные ребра, пересекающие слишком много остального.
Я бы сначала поставил самое длинное ребро, а потом бы присоединял новые вершины, немного похоже на триангуляцию Делоне, только др критерии
1
|
|
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|||
| 04.01.2014, 13:31 | |||
|
0
|
|||
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
| 04.01.2014, 19:07 | |
|
0
|
|
|
|
|
| 04.01.2014, 20:50 | |
|
Сейчас перед нами стоит такая задача: нарисовать по-красивее неориентированный невзвешенный граф, расположив на плоскости вершины.
Ребра мы изображаем отрезками. Я ещё не видел (а в этой теме я не знаток) силовых методов, в которых ребра отталкивались бы друг от друга или изгибались бы. Пример несилового алгоритма с изгибающимися ребрами, который я не могу не упомянуть, Метод связывания ребер. Давайте посмотрим на ссылку, предложенную ТС. В ней говорится, между всего прочего, что притягивание стоит делать логорифмическим, паче линейного закона Гука. Между тем, и закон притягивания, и закон отталкивания могут быть любыми, лишь бы потенциальными. К слову, можно ввести явно потенциал — функцию 2N переменных (N — число вершин), причем сила есть градиент потенциала (до знака). Например, потенциал системы Гук+Кулон выглядит так: Потенциал системы из статьи про модель Идеса выглядит так (первая сумма по несвязанным, вторая — по связанным) Повторю, что в этом я не разбираюсь, но поэкспериментировать было бы занятно. Займусь, если только дойдут руки
1
|
|
| 04.01.2014, 21:28 | ||
|
Оказывается про длину ребра речь не идет - ну так еще лучше.
По поводу "пружинок", "потенциальной энергии" и.т.п. Все это конечно здорово, но только если нет само-пересечений. А вот как их избежать - нигде ясно не звучит. Поэтому первый расклад лучше сделать методом барицентров (1.6), он этой проблемы не имеет. А потом (если останется энтузиазм) можно и с пружинками поиграться
0
|
||
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|||
| 04.01.2014, 22:18 | |||
|
Да и неориентированность тоже, за исключением того, что отсутствие кратных рёбер позволяет соединять вершины прямыми. Видел на каком-то сайте java-апплет-демку, где можно было понатыкать вершин и рёбер, нажать кнопку и посмотреть, как оно распрямится. К сожалению, понятия не имею, где ссылку искать...
0
|
|||
| 04.01.2014, 22:18 | |
|
Помогаю со студенческими работами здесь
16
Ориентированный граф задан матрицей смежности. Нарисовать граф с наименьшим количеством пересечений Как можно нарисовать схему логических переключателей имея только программу? Как нарисовать граф? Как нарисовать граф Как лучше нарисовать граф (блок-схему) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|