|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
05.12.2013, 00:06 | #1 | |
.NET Изобретаем велосипед, или как найти ближайшую вершину полилинии?
Чайник
Регистрация: 01.12.2011
Сообщений: 27
|
||
Просмотров: 6248
|
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
Цитата:
2. найти ближайшую вершину (сравниваем расстояние от точки до вершин участка полилинии и выбираем меньшее) Примерный код функции поиска расстояний между двумя точками Код:
Я думая что пишу ужасный код, но Вы меня превзошли. Очень рекомендую заняться рефакторингом. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Я не очень понимаю необходимость первого шага... Одна сторона треугольника всегда будет не больше суммы длин двух других сторон. И еще момент - а как быть с дуговыми сегментами или сглаженными полилиниями?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
Цитата:
AB= AC+BC - точка лежит на сегменте AB BD <> BC+DC - точка не лежит на сегменте BD Последовательно проходя по сегментам находим нужный. Каюсь, забыл про них. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Понял, умолк Я-то по инерции подумал про реализации на .NET аналогов vlax-curve-getclosestpointto, vlax-curve-getclosestpointtoprojection, vlax-curve-getDistAtPoint и им подобным функциям Мне кажется, где-то подобные вопросы уже мелькали...
--- Добавлено: http://www.theswamp.org/index.php?to...2790#msg492790 - не то?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Чайник Регистрация: 01.12.2011
Сообщений: 27
|
теперь все работает как часы, всем премного благодарен )
----- добавлено через ~5 мин. ----- Цитата:
пытался через GetDistAtPoint сделать, но что-то не срослось у меня с логическими операциями ----- добавлено через ~8 мин. ----- Догадываюсь, что мой код ужасен и страшен ) прошу сильно не ругаться - я не программист, главное, чтоб работало )) |
|||
|
||||
Можно попробовать по другому. Есть такая вещь, как параметр линии (GetPointAtParam-GetParamAtPoint, GetDistAtParam-GetParamAtDist и т.п.). У полилинии в каждой вершине - целое значение параметра, между ними - дробное. К примеру, я беру точку на полилинии и нахожу ее параметр (GetParamAtPoint), предположим, что он равен 3.56. Это значит, что она лежит между вершинами с параметрами 3.0 и 4.0. Получаем расстояния с помощью GetDistAtParam и вычисляем нужные разности.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
Рефа́кторинг или реорганизация кода — процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы.
Как пример, вот этот код Код:
Код:
Цитата:
Еще одно уточнение, значит ли параметр 3,56, что указанная точка ближе к вершине с параметром 4? |
|||
|
||||
Да, т.к. параметр равномерен внутри сегмента.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
||||
На 99% уверен, что да
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
это значит что для варианта
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Boxa, как округлять будешь значение "3,5"?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
Только учтите, что всё это хорошо будет работать только: 1. Если точка действительно лежит на полилинии 2. Полилиния несамопересекающаяся в этой точке. ----- добавлено через 34 сек. ----- По правилам округления.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
|
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Lisp найти радиус полилинии | julia170895 | LISP | 2 | 10.11.2013 11:34 |
LISP. Как найти точку пересечения полилинии и сплайна или другой полилинии? | LastGraff | LISP | 11 | 09.09.2011 13:23 |