|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
30.05.2012, 13:39 | #1 | |
Поиск минимального расстояния между линейными примитивами
Инженер СКС
г. Домодедово МО
Регистрация: 21.08.2009
Сообщений: 72
|
||
Просмотров: 9525
|
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
На Вашем рисунке объекты пересекаються, то есть минимальное расстояние=0, найти можно только ТОЧКУ пересечения - через ту-же IntersectWith
з.ы. все увидел что это трехмерка. Ну пока ничего кроме долгой и муторной проверки через определенный шаг (например 1% от длинны линии) с последующей "доводкой" до заданной точности, на ум не приходит.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 30.05.2012 в 15:20. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Вроде бы на theswamp.org были какие-то лиспы на поиск минимального расстояния между кривыми. Может, поможет?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Мне это как-то так представляется.
Метод №1 - аналитический: Тут надо рассматривать расстояния по методу определения расстояния между скрещивающимися прямыми (см. аналитическую геометрию в пространстве). Объекты исследования - LINE (отрезок) или сегменты объектов POLYLINE и LWPOLYLINE (полилинии). Самый простой вариант - отрезок с отрезком. Алгоритм для него: - Проверяем, принадлежат ли отрезкам концы перпендикуляра к скрещивающимся прямым, проходящим через отрезки. - Если да, то кратчайшее расстояние между ними - это кратчайшее расстояние между скрещивающиися прямыми, проходящими через эти отрезки. - Если нет, то кратчайшее расстояние между ними - это расстояние между какими-то вершинами. Проверяем все варианты - это 2х2=4 варианта: PT11-PT21, PT11-PT22, PT12-PT21, PT12-PT22. Тут PT11 и PT12 - вершины первого отрезка, PT21 и PT22 - вершины второго отрезка. Для вариантов полилиния с полилинией надо попарно каждые сегменты одной полилинии тестировать с каждым сегментом другой полилинии по вышеприведенному алгоритму для отрезков (слово "отрезок" заменить на слово "сегмент"). Вариантов будет NхM, где N и M - количества сегментов в полилиниях. Чем их больше - тем больше вычислений и дольше работа программы. Все это справедливо, только для этого случая, когда полилинии состоят только из линейных сегментов. Метод №2 - итерационный: Это как раз то, что Дима_ предложил в #2. Берем одну линию (неважно какого типа - отрезок или полилинию), делим ее на маленькие отрезки, определяем расстояния от центров этих отрезков до второй линии - на это есть стандартные функции vlax-curve-... Оставляем тот отрезок, на котором это расстояние окажется минимальным, делим его на отрезочки поменьше, снова определяем расстояния от центров уже этих отрезков до второй линии, находим отрезок с минимальным расстоянием... и так до тех пор, пока не достигнем какой-то минимальной длины отрезка, например 1e-6. Здесь, мне кажется, гораздо разумнее делать по 2-му методу. Последний раз редактировалось Do$, 31.05.2012 в 00:21. |
||||
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 571
|
Предлагаю такой вариант, из первой вершины первой кривой с помощью vlax-curve-getClosestPointTo находим точку на второй кривой, из этой точки на второй кривой vlax-curve-getClosestPointTo на первую кривую. И так далее, пока точки на кривых не начнут попадать сами в себя, таком образом найдем минимальное расстояние на некотором сегменте. Теперь делаем так для каждой вершины первой кривой (на самом деле можно пропускать все вершины которые попали в последний сегмент) и из набора минимальных расстояний на сегментах берем, минимальное оно и будет минимальным для всей кривой.
NEDIS, попробуй так Код:
__________________
cadtools |
|||
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 571
|
Цитата:
первый вариант допила (отличается от исходного кода одним символом, выделено красным) Код:
P.P.S. Второй вариант допила, вроде как работает Код:
__________________
cadtools Последний раз редактировалось TararykovDG, 31.05.2012 в 13:05. |
|||
|
||||
Цитата:
Пы.Сы. Кажется, так и сделано уже |
||||
|
||||
Регистрация: 21.07.2008
Луцьк
Сообщений: 179
|
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Там лиспа всего 1 строчка, и все это можно сделать макросом на кнопке
Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Расстояния между компенсаторами тепловых сетей | proekt_mep | Отопление | 10 | 29.05.2012 14:17 |
Автоматический поиск заданного расстояния между двумя линиями | Shaft | Программирование | 18 | 08.07.2010 13:53 |
Расчет расстояния между температурно-усадочными швами в ж/б конструкциях | Анастасия Филимонова | Железобетонные конструкции | 7 | 11.02.2010 13:02 |
Масштабирование нескольких объектов без изменения расстояния между ними...Как!?!? | Botan | AutoCAD | 1 | 23.07.2009 17:35 |
Расстояния между температурно-усадочными швами по нормам | novichOK | Конструкции зданий и сооружений | 4 | 22.05.2009 17:39 |