Объединение полилиний

Автор Тема: Объединение полилиний  (Прочитано 3574 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Объединение полилиний
« : 01-11-2016, 19:31:57 »
Добрый вечер всем,
Вроде уже спрашивал что-то подобное, но, не смог найти  :-[
Нужно отдельные полилинии объединить в одну общую?
Было так:

Сделать так:

Только анализировать по точкам (нужно придумать и написать алгоритм), или есть класс который это умеет (типа region, brep, mpolygon).
Из второго все попробовал, не получается.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Объединение полилиний
« Ответ #1 : 01-11-2016, 19:50:14 »
В плоской геометрии, не учитывая миллион проблем, которые могут возникнуть (т.е. для случая на картинке) все просто: получаешь все точки обеих полилиний и из них берешь четыре - самую верхнюю левую, самую нижнюю левую, самую верхнюю правую и самую нижнюю правую. Отсеять, сравнивая Х и Y не так сложно. Потом по этим точкам строишь новую полилинию

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Объединение полилиний
« Ответ #2 : 01-11-2016, 19:59:50 »
Ну понял, то есть надо алгоритм писать.
Спасибо Саш!

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Объединение полилиний
« Ответ #3 : 01-11-2016, 20:03:33 »
Ну понял, то есть надо алгоритм писать.
Даже алгортимы писать не нужно - загоняй точки в списки List<Point3D>() и используй преимущества linq. Например _list.OrderBy(p=>p.X).ToList() - вернет список с точками, отсортированными по значению координаты Х.

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Объединение полилиний
« Ответ #4 : 01-11-2016, 20:04:58 »
Так пробовал. Иногда самопересечения получаю  :-[

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение полилиний
« Ответ #5 : 01-11-2016, 20:24:29 »
Что-то подобное у нас на форуме уже было. Тут неясны условия задачи. Всегда ли должны получатся прямоугольники? Что делать если рядом два прямоугольника разной высоты? И т.д.

P.S.: Кстати, это же тоже твоя тема: http://adn-cis.org/forum/index.php?topic=7002.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Объединение полилиний
« Ответ #6 : 01-11-2016, 20:31:24 »
Ну круто будет, если бы любые полилинии могли объединяться.  8)
Но, понятно, что конкретных обстоятельств миллион.

Там, в итоге получилось - из объединенного региона полилиний взять внешний контур, т.к. все полилинии соприкасались друг с другом.
А тут, так не получается. Объединенный регион, дает две отдельные внешние петли (Loop).