Определение объектов по контурам

  • Автор темы Автор темы Pentix
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Pentix

Участник
Топикстартер
Сообщения
3
Реакции
0
Добрый день!

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

С уважением,
Алексей
 
В смысле - как получить? Макросом или руками? Если руками - то через булевские операции (Shape->Trim, Intersect,... и т.д.) Макросом примерно так же, но задача достаточно нетривиальная - ведь придется перебирать всевозможные комбинации смежных фигур, а это может вылиться в достаточно серьезный алгоритмический геморрой...
 
  • Спасибо
Реакции: Pentix
В смысле - как получить? Макросом или руками? Если руками - то через булевские операции (Shape->Trim, Intersect,... и т.д.) Макросом примерно так же, но задача достаточно нетривиальная - ведь придется перебирать всевозможные комбинации смежных фигур, а это может вылиться в достаточно серьезный алгоритмический геморрой...

Я буду даже не макрос писать, а через COM создавать эти контура и обрабатывать их, т.е. перебрать комбинации не вопрос.
Я просто не знаток CorelDraw и подумал, вдруг он так делать умеет из коробки.

По поводу булевых операций - не понял, как можно разделить фигуру незамкнутой линией (как на рисунке)

Спасибо
 
Ну, я бы так оптимистично не мыслил - к примеру, лично я с трудом себе представляю, как алгоритмически подобный перебор организовать.
Самое простое - делать, к примру, тот же Trim, оставляя промежуточные фигуры. Что касается незамкнутых фигур - это, как раз, не проблема, их всегда можно преобразовать через Convert outline to curve
 
В Adobe Illustrator это можно сделать командой Pathfinder>Divide. В CorelDRAW "из коробки" такой булевой операции нет. В новых версиях подобного можно достичь прокликав рисунок инструментом Smart fill tool.
 
Divide вевозможные комбинации объектов не перебирает.
 
ну есть же умная заливка.
Я бы скинул все объекты в растр, бы вычислил области для заливки, а затем напряг бы умную заливку.
Можно подойти итерационно, сделать охватывающий прямоугольник с запасом, залить его, затем находить пустые области и снова их заливать.
 
а в программе не хотите все это посчитать? )
 
Последние два поста ускользают от моего понимания...
 
имея координаты вершин каждой исходной фигуры, можно рассчитать координаты вершин искомых фигур, образующихся при пересечении. геометрия на уровне 5 класса средней школы где-то
 
имея координаты вершин каждой исходной фигуры, можно рассчитать координаты вершин искомых фигур, образующихся при пересечении. геометрия на уровне 5 класса средней школы где-то


Может это покажется грубым, но вы там сейчас учитесь? Если у вас нет полного понимания проблемы, то стоит свои предложения писать в менее категоричной форме.

Пс: всем спасибо, задача решена. Если кому нибудь интересно, могу описать алгоритм
 
да я просто МБК объяснил, что имел в виду. конкретно вам предложение было
а в программе не хотите все это посчитать? )

это так категорично прозвучало? извините :(
 
Ну геометрически в ко
имея координаты вершин каждой исходной фигуры, можно рассчитать координаты вершин искомых фигур, образующихся при пересечении. геометрия на уровне 5 класса средней школы где-то
Зависит от примитивов. Учитывая кривые безье и прочий изврат, то класс задачи вырастает.
 
На самом деле, имея координаты узлов кривых Безье, даже отследить самопересечения - достаточно сложная задача даже для первого курса. Подобное с нуля на VBA реализовывать - все равно что самому корел на ассемблере писать.
А все таки интересно, как реализована задача на текущий момент?
 
Статус
Закрыто для дальнейших ответов.