Посл.ответ |
Сообщение |
Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник UPX Killer -d
|
Создано: 15 апреля 2006 15:14 · Личное сообщение · #1
Превед!
Есть матрица смежностей (размера эдак 50x50), по ней нужно нарисовать граф, или сделать что-то вроде ObjectBrowser из Борландового С++. Язык - ВБ. Как лучше реализовать такое? Любые предложения - сюда на рассмотрение, буду признателен =)
----- Я медленно снимаю с неё UPX... *FF_User* | Сообщение посчитали полезным: |
|
Ранг: 631.1 (!), 62thx Активность: 0.37↘0.01 Статус: Участник Автор VB Decompiler
|
Создано: 15 апреля 2006 18:22 · Личное сообщение · #2
Ну если я правильно понял, то что мешает нарисовать график в PictureBox'е перебрав все точки матрицы или засунув всю матрицу в памяти в объект ipicturedisp? Правда последнее это гемор.
----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! | Сообщение посчитали полезным: |
Ранг: 307.9 (мудрец), 196thx Активность: 0.18↘0 Статус: Участник
|
Создано: 16 апреля 2006 11:59 · Личное сообщение · #3
GPcH
Человеку нужно нарисовать граф по матрице семжности, а не график ... чучуть по внимательнее уважаемый.
Похоже лабу сдавать нужно =)
----- Don_t hate the cracker - hate the code. | Сообщение посчитали полезным: |
Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник UPX Killer -d
|
Создано: 16 апреля 2006 12:33 · Личное сообщение · #4
Приложен мой рисунок как это выглядит. Если одна вершина соединена с другой, то в матрице ноль, иначе - один. Конечно, диагональ матрицы - нули, матрица симетрична. f50e_16.04.2006_CRACKLAB.rU.tgz - graph.gif
----- Я медленно снимаю с неё UPX... *FF_User* | Сообщение посчитали полезным: |
Ранг: 310.8 (мудрец), 29thx Активность: 0.43↘0 Статус: Участник
|
Создано: 16 апреля 2006 13:29 · Личное сообщение · #5
AlexZ пишет:
Как лучше реализовать такое?
Если главное "смотребельность", то
1) сортируем столбцы по числу единиц
2) выбираем минимальные и рисуем в первом ряду - либо все, либо тоже рядами.
3) и т.д....
Если граф плотный, то все равно трудно что-то нарисовать автоматом.
Если граф - это "псевдо-дерево" с редкими связями между ветками, то мой алгоритм
даст хорошую картинку, если продумать все пункты.
ObjectBrowser гораздо проще получается :
1) В списке об'ектов первого уровня - узлы с минимумом связей.
2) При тюкании на пункт списка в соседнем столбце открываем его соседей.
3) При необходимости можно добавить пару-тройку столбцов для "дальних связей".
| Сообщение посчитали полезным: |
Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник 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.04↘0 Статус: Участник
|
Создано: 16 апреля 2006 14:30 · Личное сообщение · #7
Если нужно хоть что-то, а времени мало, то можно просто расположить все вершины по окружности, и посоединять нужные . Но это тупо.
А вообще граф в принципе можно нарисавать по условию??? (т.е. для любой тройки вершин выполняется правило треугольника............. ну или многоугольрика)
| Сообщение посчитали полезным: |
Ранг: 44.7 (посетитель) Активность: 0.04↘0 Статус: Участник
|
Создано: 16 апреля 2006 14:37 · Личное сообщение · #8
Или его в 3D yнарисовать надо????
| Сообщение посчитали полезным: |
Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник UPX Killer -d
|
Создано: 16 апреля 2006 16:15 · Личное сообщение · #9
В ТриДэ ? Это шутка? Тут в ДваБэ хоть бы подсказал кто...
----- Я медленно снимаю с неё UPX... *FF_User* | Сообщение посчитали полезным: |
Ранг: 310.8 (мудрец), 29thx Активность: 0.43↘0 Статус: Участник
|
Создано: 16 апреля 2006 16:16 · Личное сообщение · #10
AlexZ пишет:
Есть рекомендации по направлению?
Простота моего алгоритма може привести вот к чему : если одиночная вершина имеет "толстого" соседа, то линия будет тянуться до самого "низа" - некрасиво.
Поэтому другая идея :
1) В центре размещаем одну или несколько "максимальных" вершин - центры звезд.
2) Дальше пытаемся разместить остальные вершины так, чтобы не было "пересечений".
К сожалению тут уже надо алгоритм придумывать, но зато годится для "плотных" графов.
| Сообщение посчитали полезным: |
Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник UPX Killer -d
|
Создано: 16 апреля 2006 16:46 · Личное сообщение · #11
tundra37, конечно, идея замечательная.. наверное буду пользоваться чем-то типа:
Form1.Line blablabla
Form1.Circle blablabla
Тогда рисунок будет ограничен размерами экрана.. или есть в ВБ что-то более рациональное?
----- Я медленно снимаю с неё UPX... *FF_User* | Сообщение посчитали полезным: |
Ранг: 310.8 (мудрец), 29thx Активность: 0.43↘0 Статус: Участник
|
Создано: 16 апреля 2006 16:58 · Личное сообщение · #12
VB по сути расчитан на примитивное программирование. Но в принципе можно подключить любое API.
Поэтому тебе решать : быстро - стандартные средства, красиво - АПИ, но на самом деле чисто программно совсем некрасиво получается, да и не имел дела я с графикой в VB - только интерфейс и COM-порты.
| Сообщение посчитали полезным: |
Ранг: 79.4 (постоянный) Активность: 0.09↘0 Статус: Участник
|
Создано: 16 апреля 2006 17:02 · Личное сообщение · #13
AlexZ пишет:
Тогда рисунок будет ограничен размерами экрана.. или есть в ВБ что-то более рациональное?
намного рациональнее заюзать 2 Пикчербокса(один для контейнера, в другом рисовать)
тогда размер будет ограничем размерами в 63000 х 63000 надеюсь этого хватит
и уж точно больше , чем видимая область...
в аттаче пример...
0035_16.04.2006_CRACKLAB.rU.tgz - PictScroll.rar
| Сообщение посчитали полезным: |
Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник UPX Killer -d
|
Создано: 16 апреля 2006 21:30 · Личное сообщение · #14
d1v0x, спасибо, хороший пример. Наверное на этой основе что-нибудь сделаю. Проблема в том, что я с ВБ как-то неочень, мягко выражаясь. Ну ничего, что-нибудь придумаю.. матрица меня не поимеет! =)
----- Я медленно снимаю с неё UPX... *FF_User* | Сообщение посчитали полезным: |
Ранг: 209.1 (наставник) Активность: 0.13↘0 Статус: Участник программист априори
|
Создано: 17 апреля 2006 06:46 · Личное сообщение · #15
гы мне тоже предстоит курсовик по графам ) правда я еще не делал и рисовать и ничо не надо
Определите максимальную (среди минимальных) длину пути методом Обхода в ширину в невзвешенном графе и соответствующую наиболее удаленную пару (пары) узлов, используя список смежности
| Сообщение посчитали полезным: |