Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: BearDyugin от 12-09-2017, 08:46:13

Название: Аналитический Boundary
Отправлено: BearDyugin от 12-09-2017, 08:46:13
Всем привет, стояла задача, разбить замкнутую область(полилинию) на несколько замкнутых областей другой секущей полигинией.
(https://s26.postimg.org/f26m2gba1/1-1.jpg)
Как бы решение не сложное, находим пересечение, добавляем вершины из исходных полилиний м\у этими пересечениями и получаем новые контуры.
Но в 5% случаях исходная картина бывает сложнее

(https://s26.postimg.org/khfc3f2tx/1-2.jpg) (https://postimg.org/image/khfc3f2tx/) (https://s26.postimg.org/96cof1vyt/1-3.jpg) (https://postimg.org/image/96cof1vyt/)

(https://s26.postimg.org/3w7pnrbpx/1-4.jpg) (https://postimg.org/image/3w7pnrbpx/) (https://s26.postimg.org/megnlqivp/1-6.jpg) (https://postimg.org/image/megnlqivp/)

(https://s26.postimg.org/geswi2y39/1-7.jpg) (https://postimg.org/image/geswi2y39/) (https://s26.postimg.org/hraljyvit/1-8.jpg) (https://postimg.org/image/hraljyvit/)

И со всеми случаями кроме последнего штатная Boundary отлично справляется.

Вот и думаю как быть, сидеть анализировать все возможные варианты и описывать алгоритм действия при них, или пытаться их Boundary скормить, а может где-то уже есть готовое решение хотя бы похожей задачи?
Название: Re: Аналитический Boundary
Отправлено: Александр Ривилис от 12-09-2017, 10:24:26
Думаю, что писать самому. Так как в последнем варианте (1-8) пересечения нет вообще, то как ты рассчитываешь оно будет сечь? Задача совсем неоднозначная.
Название: Re: Аналитический Boundary
Отправлено: trir от 12-09-2017, 11:00:25
DE-9IM (https://en.wikipedia.org/wiki/DE-9IM)
Название: Re: Аналитический Boundary
Отправлено: BearDyugin от 12-09-2017, 11:13:41
DE-9IM
Картинки похожи, на этом всё  :-\  больше я ни чего понял  :D
Но всё равно спасибо.
Думаю, что писать самому.
Безусловно задача для меня посильная, но последнее время мне не нравится мой код, корявый он, и весь на костылях, в том числе и из-за не понимания многих вещей, например  r-tree, или вот DE-9IM
Если вдруг кому-то задача не кажется особо нудной готов перекинуть её в "Работа для разработчиков"
Название: Re: Аналитический Boundary
Отправлено: Дмитрий Загорулькин от 12-09-2017, 11:16:14
А вот с таким справится? Если да, то можно привести 1-8 к этой ситуации и "скормить" Boundary.
Название: Re: Аналитический Boundary
Отправлено: BearDyugin от 12-09-2017, 11:33:22
А вот с таким справится? Если да, то можно привести 1-8 к этой ситуации и "скормить" Boundary.
Да но по сути зеленую линию можно провести вообще по любому правилу главное получить два замкнутых контура вместо одной области с отверстием внутри, но при этом красную зону делить не нужно, а в твоём случаи она тоже делится.
Ну и с Boundary всю картину портит указание точки внутри контура... а это задача не многим проще   ;)
Название: Re: Аналитический Boundary
Отправлено: Debalance от 12-09-2017, 12:55:51
Помню в детстве любил искать отличия на двух картинках. Куда девалась заштрихованная область?:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F249479%2F105409719.8%2F0_1752ed_693d2a47_orig.jpg&hash=943dc147087cec799c90595f02f7964b)
Название: Re: Аналитический Boundary
Отправлено: BearDyugin от 12-09-2017, 13:10:43
Куда девалась заштрихованная область?:
:D потерялась где-то

Debalance, безусловно все мы знаем что ты у нас самый большой специалист в СуперКонтурах, хотелось бы услышать твои мысли.
Название: Re: Аналитический Boundary
Отправлено: Debalance от 12-09-2017, 13:33:01
Debalance, безусловно все мы знаем что ты у нас самый большой специалист в СуперКонтурах, хотелось бы услышать твои мысли.
А какие тут могут быть мысли? Рыцарь уже всё сказал (с учетом случая №8):
Думаю, что писать самому...
А если данный случай отбросить, то классическая BOUNDARY "разруливает" с успехом всё - контуры-то не сложные. Я бы тебе мог посоветовать свою SuperBoundary - в режиме BUILD ALL она бы рассекла всё без указания точек, но у неё нет (пока) возможности работы только с командной строкой. Поэтому слить её с лисп-кодом на данном этапе не получится.