Сообщество программистов Autodesk в СНГ
ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: 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 скормить, а может где-то уже есть готовое решение хотя бы похожей задачи?
-
Думаю, что писать самому. Так как в последнем варианте (1-8) пересечения нет вообще, то как ты рассчитываешь оно будет сечь? Задача совсем неоднозначная.
-
DE-9IM (https://en.wikipedia.org/wiki/DE-9IM)
-
DE-9IM
Картинки похожи, на этом всё :-\ больше я ни чего понял :D
Но всё равно спасибо.
Думаю, что писать самому.
Безусловно задача для меня посильная, но последнее время мне не нравится мой код, корявый он, и весь на костылях, в том числе и из-за не понимания многих вещей, например r-tree, или вот DE-9IM
Если вдруг кому-то задача не кажется особо нудной готов перекинуть её в "Работа для разработчиков"
-
А вот с таким справится? Если да, то можно привести 1-8 к этой ситуации и "скормить" Boundary.
-
А вот с таким справится? Если да, то можно привести 1-8 к этой ситуации и "скормить" Boundary.
Да но по сути зеленую линию можно провести вообще по любому правилу главное получить два замкнутых контура вместо одной области с отверстием внутри, но при этом красную зону делить не нужно, а в твоём случаи она тоже делится.
Ну и с Boundary всю картину портит указание точки внутри контура... а это задача не многим проще ;)
-
Помню в детстве любил искать отличия на двух картинках. Куда девалась заштрихованная область?:
(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)
-
Куда девалась заштрихованная область?:
:D потерялась где-то
Debalance, безусловно все мы знаем что ты у нас самый большой специалист в СуперКонтурах, хотелось бы услышать твои мысли.
-
Debalance, безусловно все мы знаем что ты у нас самый большой специалист в СуперКонтурах, хотелось бы услышать твои мысли.
А какие тут могут быть мысли? Рыцарь уже всё сказал (с учетом случая №8):
Думаю, что писать самому...
А если данный случай отбросить, то классическая BOUNDARY "разруливает" с успехом всё - контуры-то не сложные. Я бы тебе мог посоветовать свою SuperBoundary - в режиме BUILD ALL она бы рассекла всё без указания точек, но у неё нет (пока) возможности работы только с командной строкой. Поэтому слить её с лисп-кодом на данном этапе не получится.