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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Найти дырки  (Прочитано 9781 раз)
V1KT0P
Гость
« Ответ #15 : Август 23, 2012, 20:35 »

Видать на новой работе особо лазить в инете не разрешают, поэтому у Вити активность к вечеру  Улыбающийся

Ну а что такое "удалить линии"? Формально никаких линий/отрезков нет, на входе есть точки. "Перепонка" выглядит так
Ну эти совпадения еще надо найти. И что мы собрались удалять?
Да нет инет не запрещают, просто времени на него нету.
Для того чтоб объяснить сперва перегони в такой формат:
Массив точек. Точка это структура представляющая собой координаты и указатели на связанные точки.
В цикле перебираешь каждую точку. Если точка имеет три звязи, то смотришь есть ли среди них еще точка с вязью, если есть, то у обеих убираешь указатели на друг друга. В итоге все перепонки пропадут. Далее вытаскиваешь первую точку из массива в новый массив, берешь указатель на следующую точку и достаешь ее из массива и так пока не дойдешь до указателя на первую точку. Так повторяй пока не закончатся точки. В итоге будут массивы точек для каждой комнаты и контура.
У тебя скорее всего оно в другом формате, но смысл один и тот-же. Если хочешь решение, то скинь минимальный проект в который загружаются данные в твой формат и укажи в каком формате нужен вывод. Тогда уже можно и функцию для этого написать.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Август 24, 2012, 11:49 »

Для того чтоб объяснить сперва перегони в такой формат:
Массив точек. Точка это структура представляющая собой координаты и указатели на связанные точки.
Хотя в моих данных это ни разу еще не встретилось, "звезды" не запрещены, т.е. точка может быть связана с любым числом других. Поэтому не 3 а "вектор векторов" - есть ли необходимость в такой структуре?

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

Рассмотрим максимально упрощенный пример. Есть квадрат с дыркой внутри (напр тоже квадратом). Внешний и внутренний соединены перемычкой. Тогда неплохо выглядит так

- нашли перепонку, это  точки напр (10, 11)(19, 20).
- из исходного массива индексов (0..100) вырезаем индексы (11..19) и копируем их во второй массив  (1 дырка)
- все готово

Как сделать это для общего случая?
Записан
V1KT0P
Гость
« Ответ #17 : Август 24, 2012, 12:19 »

Общее решение которое "съест" любые данные это самый первый вариант где надо делать обход.
Более узкое решение это убирать перепонки, это те точки которых имеют три связи.
В реале это все объяснить проще, чем на форуме =(.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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