Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Надежно определять положение точек относительно линий

Надежно определять положение точек относительно линий

Ответ
Поиск в этой теме
Непрочитано 19.12.2016, 13:59 #1
Надежно определять положение точек относительно линий
АлексЮстасу
 
топограф, технолог
 
Москва
Регистрация: 24.05.2009
Сообщений: 3,030

Как обеспечить надежное определение положения точек (вершин) относительно линий - на линии, вне линии?
Например, команда FS находит объекты, пересекающие линию выбора, лежащую на ней. При этом FS может не находить какие-то линии, лежащие на ней. Причем, для одного набора объектов в разные сеансы и в разных Автокадах не найденные линии могут меняться. См в приложенном dwg - линии magenta и red у меня FS не находила в моих 2012 и 2016 в разное время относительно белой линии.
С нашей программой, ищущей элементы, попадающие на указанные линии, похожие результаты.
Как надежно определять, попадает точка на линию или нет?
FS, похоже, использует экранные координаты - находит лишние линии при малом увеличении. Специально сделан офсет белой линии на 0.1 - желтая линия. При малом увеличении FS выбирает относительно этой желтой линии множество не пересекающих ее объектов. И относительно белой линии то же самое.
Наша программа работает с абсолютными координатами, но проблемы с надежностью обнаружения похожие.
Проблема, вероятно, в точности округления при вычислении координат точек пересечений? Как ее обеспечить для общего случая?

Вложения
Тип файла: dwg
DWG 2004
off_01.dwg (319.0 Кб, 17 просмотров)

__________________
количество моих сообщений не говорит о знании Автокада
Просмотров: 4340
 
Непрочитано 19.12.2016, 14:18
#2
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


я бы построил своё дерево и искал в нём
у AutoCAD выбор происходит в экраном наборе и экранных координатах - может быть что угодно
в fs сплошной ssget

Последний раз редактировалось trir, 19.12.2016 в 14:45.
trir вне форума  
 
Непрочитано 19.12.2016, 15:17
#3
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Я бы сам считал, благо не сложно.
Сумма расстояний от концов отрезка до точки должна быть равна длине отрезка. Есть точка, прошёлся по сегментам полилинии и проверил (правда для криволинейных сегментов нужен другой алгоритм, вычисляем кривизну дуги по трем точкам и сравниваем с кривизной сегмента, но и он не сложен)
Boxa вне форума  
 
Автор темы   Непрочитано 20.12.2016, 03:49
#4
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,030


Цитата:
Сообщение от Boxa Посмотреть сообщение
Сумма расстояний от концов отрезка до точки должна быть равна длине отрезка.
Вот это "равна" - не связано ли с округлением?
Сам Автокад, когда привязывает вершину к сегменту другого объекта, ведь наверное выдает координаты вершины с каким-то своим округлением? И от чего, кстати, зависящим? От числа знаков для установленных единиц? От степени увеличения?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 20.12.2016, 05:40
#5
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Boxa Посмотреть сообщение
Я бы сам считал, благо не сложно.
Сумма расстояний от концов отрезка до точки должна быть равна длине отрезка. Есть точка, прошёлся по сегментам полилинии и проверил (правда для криволинейных сегментов нужен другой алгоритм, вычисляем кривизну дуги по трем точкам и сравниваем с кривизной сегмента, но и он не сложен)
DwgRuLispLib: Геометрия. Принадлежность точки отрезку
DwgRuLispLib: Геометрия. Принадлежность точки дуге
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.12.2016, 07:25
#6
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


В AutoCAD'е есть так называемая Экранная система координат (Display coordinate system). Когда Акад строит сцену, он создаёт набор "видимых" примитивов и пересчитывает их в эту СК. И многие функции работают в этой СК, например привязки, выбор, поиск контура штриховки и т. п.
trir вне форума  
 
Непрочитано 20.12.2016, 09:25
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Сам Автокад, когда привязывает вершину к сегменту другого объекта, ведь наверное выдает координаты вершины с каким-то своим округлением? И от чего, кстати, зависящим? От числа знаков для установленных единиц? От степени увеличения?
Если не ошибаюсь, от точности данных - 16 знаков, и не более того.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.12.2016, 09:35
#8
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Вот это "равна" - не связано ли с округлением?
конечно связано, но это Вам определять критерии и от экранной системы координат ничего не зависит.
Вот и VVA, уже и реализацию откопал...


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Сам Автокад, когда привязывает вершину к сегменту другого объекта, ведь наверное выдает координаты вершины с каким-то своим округлением? И от чего, кстати, зависящим? От числа знаков для установленных единиц? От степени увеличения?
Тут подробнее: https://habrahabr.ru/post/112953/
Boxa вне форума  
 
Непрочитано 20.12.2016, 09:49
#9
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
и от экранной системы координат ничего не зависит
зависит, дело именно в ней
не могу выложить скриншот, поэтому расскажу на словах: зумируем полилинию, выделяем её и меняем текущую вершину, потом приближаем крестик-маркер вершины и видим причину
trir вне форума  
 
Непрочитано 20.12.2016, 10:09
#10
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


trir, обсуждается вроде положение точек относительно линий, соответственно работаем с координатами в мск, а глюки графического движка автокада и визуализация, это про другое.
Boxa вне форума  
 
Непрочитано 20.12.2016, 10:24
#11
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
команда FS находит объекты, пересекающие линию выбора, лежащую на ней. При этом FS может не находить какие-то линии, лежащие на ней
это глюки графического движка автокада

я бы посмотрел исходники этой функции

Последний раз редактировалось trir, 20.12.2016 в 10:43.
trir вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Надежно определять положение точек относительно линий

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение дуг, линий в единый объект, Как объединить? Vladimir.P AutoCAD 41 25.01.2015 08:03
Проблема с весом линий при печати векторного чертежа через видовые экраны, есть решение? Кравченко Александр AutoCAD 3 18.05.2011 16:14
Импорт координат точек из файла съемки тахеометра Trimble M3 в AutoCAD Red Nova Программирование 33 17.05.2011 16:46
Автоматическое изменение маштаба невидимых линий в Mechanical Desktop bambrenus Вертикальные решения на базе AutoCAD 3 03.12.2009 21:17
Печать со скрытием линий вызывает ошибку Autocad-приложения и его закрытие. BM60 AutoCAD 7 27.04.2009 20:10