Russian Qt Forum
Ноябрь 22, 2024, 19:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отфильтровать граф  (Прочитано 7392 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Октябрь 31, 2012, 21:13 »

Добрый вечер

Есть N вершин (точек в пр-ве) каждая знает с какими др вершинами она соединена, т.е. ребра известны. Нужно как-то удалить некоторые ребра так чтобы бредовая картинка (аттач) приобрела божеский вид. Новые ребра создавать нельзя. Конечно получить корректную поверхность было бы просто замечательно, но это вряд ли достижимо. Нужно просто "поприличнее".

Слушаю Ваши предложения

Спасибо
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Октябрь 31, 2012, 23:15 »

понятия «божеский вид» и «поприличнее» от математики довольно далёки. что конкретно нужно? (выпуклая оболочка вряд ли как я понимаю) что планируется делать с графом в дальнейшем?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Ноябрь 01, 2012, 10:48 »

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

понятия «божеский вид» и «поприличнее» от математики довольно далёки.
Так ведь здесь "форум программистов" Улыбающийся Ладно, давайте определим что такое "корректная поверхность"

- ребра не пересекаются
- любой внутренний контур имеет 3 ребра

Т.е просто нормальная 3D модель, mesh. Такой идеальный результат конечно желателен, но необязателен. Если будут пересечения (в разумных пределах) - переживу. Конечно можно продолжать придираться "а что такое в разумных пределах?" - но это не конструктивно.
Записан
Disa
Гость
« Ответ #3 : Ноябрь 02, 2012, 15:05 »

Для планарных, помню есть "метод Сигуиямы".
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноябрь 02, 2012, 23:22 »

Для планарных, помню есть "метод Сигуиямы".
Вот-вот Улыбающийся Примерно такое обычно и находится при гуглении. Не, ну конечно нельзя сказать "не по теме" - там вроде есть нечто подобное на картинке. Но как делать (хоть на словах) - указаний ноль. А взять  готовое (дабы "не изобретать велосипед") - об этом можно только мечтать...

Да, и почему не слышно типовых "посмотри на..", "почитай статьи" и др вумных поучений? Как быстро все это исчезло - а ведь я готов и посмотреть и почитать..  Ну ладно, спасибо хоть за Сигуяму  Улыбающийся
Записан
Disa
Гость
« Ответ #5 : Ноябрь 02, 2012, 23:43 »

Я это когда-то смотрел у Алены С++, оттуда и вспомнил. Мне нужно было рисовать графы с минимум пересечений (ну там был автомат и состояний было не более 2-3 десятков), но потом я узнал, что graphviz это умеет и в итоге я просто писал граф в файл, а отображал уже graphvizом.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Ноябрь 04, 2012, 19:28 »

Кстати задача оказалось совсем несложной  Улыбающийся
Записан
Bepec
Гость
« Ответ #7 : Ноябрь 04, 2012, 21:22 »

Цитировать
00.01 Ник: Как заработать миллион ничего не делая?
00.05 Ник: А, всё понятно. Кстати задача оказалась несложной!
*srv: Ник exit. Reason: "Всё итак понятно".
Записан
IGreench
Гость
« Ответ #8 : Март 23, 2013, 13:09 »

А можно посмотреть или хотя бы узнать решение сие задачи?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Март 23, 2013, 15:01 »

А можно посмотреть или хотя бы узнать решение сие задачи?
Наверное "сей" Улыбающийся  Для каждой вершины сортируем все выходящие из нее ребра по углу (по часовой или против - как нравится). Для каждого ребра берем предыдущее и следующее, угол между смежными не должен быть > 180. Три ребоа образуют четырехугольник, парим его по Борису Николаевичу: проверяемое ребро должно оказаться лучшей диагональю, иначе подлежит удалению.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.389 секунд. Запросов: 23.