|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Да, вопрос именно в этом, что мы понимаем под словом "внутри" и "снаружи". Как вариант можно рассмотреть игнор пограничных точек, но тогда нужно проверять принцип погрраничности, а затраты на это действие зависят от многоугольника границы
|
|||
|
||||
Если немного переписать функцию, то можно анализировать все варианты
Код:
Единственное улучшение - возвращать можно целые числа: 0 - не в контуре 100 - в контуре 1 - на границе И сравнивать целые числа 400 - 4 точти внутри контура 300 - 3 точки внутри, одна снаружи 301 - 3 точки внутри, одна на границе и т.д.
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Хорошо действует Принадлежность точки криволинейному контуру VVA.
Действует для линейных объектов, образующих контуры: Код:
Для штриховок, регионов, мультиполигонов. В т.ч. для площадных объектов с отверстиями в них. Можно ли расширить эту функцию для площадных объектов?
__________________
количество моих сообщений не говорит о знании Автокада |
||||
|
||||
Пока нашел почти аналог In_Figure_Obj - LM:Inside-p от Lee Mac, https://www.cadtutor.net/forum/topic...comment=254876.
Она на 4 года "новее" In_Figure_Obj - 2011 г. LM:Inside-p работает в 1.8 раз быстрее, но только для LWPolyline. Можно ли расширить ее действие на окружности, эллипсы, сплайны и другие полилинии? Или тогда скорость сразу резко уменьшится? --------------- Для самопересекающихся объектов In_Figure_Obj выдает invalid... - я ошибся, не выдает, работает нормально.
__________________
количество моих сообщений не говорит о знании Автокада Последний раз редактировалось АлексЮстасу, 24.06.2022 в 02:59. |
||||
|
||||
In_Figure_Obj выдает ошибочный результат, если горизонтальный вправо луч из точки попадает на вершину контура.
И In_Figure_Obj на каких-то эллипсах (желтый) вообще зависает. На каких - закономерности не нашел. Проверял так: Код:
__________________
количество моих сообщений не говорит о знании Автокада |
||||
|
||||
Цитата:
Нашел еще один вариант от Ли на болоте (требуется регистрация) https://www.theswamp.org/index.php?topic=43550.0 Код:
Код:
Публикую без проверки. LM:PointInside-p использует метод 'intersectwith, поэтому должна работать и с полигонами и проч, ели автодеск заложил такую возможность
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 20.04.2011
Сообщений: 402
|
|
|||
|
||||
LM:PointInside-p с регионами у меня не работает. Как и с мультиполигонами, штриховками и 3дфейсами.
Со сплайнами, с окружностями, с дуговыми сегментами работает. Для точек на границе выдает "; error: Automation Error. Points are coincident". Для полилиний с самопересечениями может выдать и "Point is INSIDE", и "Point is OUTSIDE". Т.е. ненадежно. Так же несерьезно с isPtinPM. Во многих случаях выдает загадочное ""At", при том, что точки далеко от границ. Наверняка отличное решение, но не на лисп. Если про другие языки, то феноменально быстрое и точное решение дал Debalance - https://dwg.ru/b/topomap/287 и т.д.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
|
||||
Регистрация: 10.11.2023
Сообщений: 2
|
В общем, 11 лет назад поломал голову. Решение такое. Берем произвольную прямую, проходящую через точку. Для простоты, можно взять горизонтальную (т.е. Y не меняется) и считаем число пересечений контура с этой прямой слева и справа. если оба получившихся числа нечетные - точка в контуре. И не надо всякие углы изобретать.
|
|||
|
||||
конструктор Регистрация: 21.07.2007
Петрозаводск
Сообщений: 1,982
|
Надо не спутать пересечение с точкой касания, а касание - с касанием в точке перегиба.
|
|||
|
||||
Регистрация: 10.11.2023
Сообщений: 2
|
Конечно, этот случай надо обрабатывать отдельно и не учитывать. А так, все отлично работает. Код сложно привести, там случай существенно сложнее идеализированного контура и точки, большой, и вряд ли кто-то будет ковыряться. Главное идея.
|
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Справка по форуму | Admin | FAQ: Часто задаваемые вопросы | 13 | 04.03.2014 11:12 |
У меня вопрос по Ansys, как правильно оформить контакт с жестким телом? | Цветочек | ANSYS | 17 | 10.11.2013 09:41 |
Проектирование человека. | FOXAL | Разное | 283 | 25.05.2010 09:52 |
Вопрос: Интерактивное построение полилинии внутри lisp-программы | Tonic | LISP | 5 | 26.04.2010 15:50 |
Как определить, что точка за пределами видимой области? VBA | den001 | Программирование | 6 | 20.01.2007 20:48 |