Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Рисование графоф в VB.
Посл.ответ Сообщение

Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 15 апреля 2006 15:14
· Личное сообщение · #1

Превед!
Есть матрица смежностей (размера эдак 50x50), по ней нужно нарисовать граф, или сделать что-то вроде ObjectBrowser из Борландового С++. Язык - ВБ. Как лучше реализовать такое? Любые предложения - сюда на рассмотрение, буду признателен =)

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

Создано: 15 апреля 2006 18:22
· Личное сообщение · #2

Ну если я правильно понял, то что мешает нарисовать график в PictureBox'е перебрав все точки матрицы или засунув всю матрицу в памяти в объект ipicturedisp? Правда последнее это гемор.

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!





Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 16 апреля 2006 11:59
· Личное сообщение · #3

GPcH
Человеку нужно нарисовать граф по матрице семжности, а не график ... чучуть по внимательнее уважаемый.

Похоже лабу сдавать нужно =)

-----
Don_t hate the cracker - hate the code.




Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 16 апреля 2006 12:33
· Личное сообщение · #4

Приложен мой рисунок как это выглядит. Если одна вершина соединена с другой, то в матрице ноль, иначе - один. Конечно, диагональ матрицы - нули, матрица симетрична.

f50e_16.04.2006_CRACKLAB.rU.tgz - graph.gif

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 16 апреля 2006 13:29
· Личное сообщение · #5

AlexZ пишет:
Как лучше реализовать такое?

Если главное "смотребельность", то
1) сортируем столбцы по числу единиц
2) выбираем минимальные и рисуем в первом ряду - либо все, либо тоже рядами.
3) и т.д....
Если граф плотный, то все равно трудно что-то нарисовать автоматом.
Если граф - это "псевдо-дерево" с редкими связями между ветками, то мой алгоритм
даст хорошую картинку, если продумать все пункты.
ObjectBrowser гораздо проще получается :
1) В списке об'ектов первого уровня - узлы с минимумом связей.
2) При тюкании на пункт списка в соседнем столбце открываем его соседей.
3) При необходимости можно добавить пару-тройку столбцов для "дальних связей".



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 16 апреля 2006 14:13
· Личное сообщение · #6

tundra37, по первому подходу можно реализовать как в атаче, а вот со вторым будут траблы.. Осталось выбрать художественные средства ВБ (увольте) и начать творить =) Есть рекомендации по направлению?

d323_16.04.2006_CRACKLAB.rU.tgz - graph_5x5.gif

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 44.7 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 16 апреля 2006 14:30
· Личное сообщение · #7

Если нужно хоть что-то, а времени мало, то можно просто расположить все вершины по окружности, и посоединять нужные. Но это тупо.
А вообще граф в принципе можно нарисавать по условию??? (т.е. для любой тройки вершин выполняется правило треугольника............. ну или многоугольрика)



Ранг: 44.7 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 16 апреля 2006 14:37
· Личное сообщение · #8

Или его в 3D yнарисовать надо????



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 16 апреля 2006 16:15
· Личное сообщение · #9

В ТриДэ ? Это шутка? Тут в ДваБэ хоть бы подсказал кто...

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 16 апреля 2006 16:16
· Личное сообщение · #10

AlexZ пишет:
Есть рекомендации по направлению?

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



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 16 апреля 2006 16:46
· Личное сообщение · #11

tundra37, конечно, идея замечательная.. наверное буду пользоваться чем-то типа:
Form1.Line blablabla
Form1.Circle blablabla
Тогда рисунок будет ограничен размерами экрана.. или есть в ВБ что-то более рациональное?

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 16 апреля 2006 16:58
· Личное сообщение · #12

VB по сути расчитан на примитивное программирование. Но в принципе можно подключить любое API.
Поэтому тебе решать : быстро - стандартные средства, красиво - АПИ, но на самом деле чисто программно совсем некрасиво получается, да и не имел дела я с графикой в VB - только интерфейс и COM-порты.



Ранг: 79.4 (постоянный)
Активность: 0.090
Статус: Участник

Создано: 16 апреля 2006 17:02
· Личное сообщение · #13

AlexZ пишет:
Тогда рисунок будет ограничен размерами экрана.. или есть в ВБ что-то более рациональное?


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


0035_16.04.2006_CRACKLAB.rU.tgz - PictScroll.rar



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 16 апреля 2006 21:30
· Личное сообщение · #14

d1v0x, спасибо, хороший пример. Наверное на этой основе что-нибудь сделаю. Проблема в том, что я с ВБ как-то неочень, мягко выражаясь. Ну ничего, что-нибудь придумаю.. матрица меня не поимеет! =)

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 209.1 (наставник)
Активность: 0.130
Статус: Участник
программист априори

Создано: 17 апреля 2006 06:46
· Личное сообщение · #15

гы мне тоже предстоит курсовик по графам ) правда я еще не делал и рисовать и ничо не надо

Определите максимальную (среди минимальных) длину пути методом Обхода в ширину в невзвешенном графе и соответствующую наиболее удаленную пару (пары) узлов, используя список смежности


 eXeL@B —› Программирование —› Рисование графоф в VB.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати