|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Апроксимированную полилинию преобразовать в один дуговой сегмент.
Регистрация: 12.08.2009
Сообщений: 464
|
||
Просмотров: 4318
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Руками?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.03.2008
Зелик
Сообщений: 1,600
|
В какой песне? С каким радиусом? Кто и по какому принципу ее аппроксимировал? Где центр? Принадлежат ли все вершины полилинии одной окружности? И, наконец, что мешает нарисовать дугу по 3-м точкам (вершинам PL)?
__________________
* Буква "ё" не используется в тексте исключительно в связи с требованиями ЕСКД. |
|||
![]() |
|
||||
Конструктор по сути (машиностроитель) Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391
|
"Упрощу" задачу. Цель - упростить длинную полилинию. Аппроксимировать дугами с отклонением, скажем, в 0.1мм от исходного контура. Практическая (для меня, например) польза - упростить сложный контур гравировки для модели на ЧПУ. Одна простая буква хитрого шрифта иначе может разбиться на несколько сотен отрезков. А на глаз вполне бы хватило 4...10 дуг.
PS Мне кажется, или тут где-то уже было про подобное? в G-tools нет такой функции?
__________________
Век живи, век учись - ... |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Bull, CaMoCAD, обратите внимание на то, в каком разделе задан вопрос. Я не зря спрашивал про метод выполнения...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Отсюда
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Алгоритм могу предложить, но на реализацию временем пока не располагаю. Сработает он только если такая полилиния образована посредством какой-либо команды аппроксимации, например, из набора PL-Tools, то есть, так называемая "визуальная", аппроксимированная дуга отвечает двум условиям:
1) состоит из сегментов одинаковой длины, 2) угол между ними одинаков. В приложенном файле почти так и есть. Видимо, некоторые ручки были "пошевелены" пользователем. Как программно можно обработать это "почти" - непонятно. Так вот, в полилинии обрабатывается поочередно каждый сегмент, и для группы сегментов, удовлетворяющих указанным условиям, вычисляется центральная точка дуги, лежащая либо на перпендикуляре к середине сегмента, либо на вершине, в зависимости от четности количества сегментов. По трем точкам строится дуга....и так далее. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Могу так же предложить алгоритм. Придумал только что, поэтому при тщательном анализе могут быть и изъяны.
1. Для восстановления дуги должно быть не менее 3-х точек. 2. Если точек больше, берем первые 3 и восстанавливаем круг 3. Рассматривает 4-ю и каждую последующую точку на предмет принадлежности окружности (расстояние от центра круга до рассматриваемой точки равно радиусу в пределах указанного допуска) 3.1 Если точка принадлежит кругу, то возвращаемся в п.3 3.2 Если нет - восстанавливаем дугу по центру, начальной и конечной точке. Берем следующие 3 точки и возвращаемся в п.3
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 13.11.2014 в 22:12. |
|||
![]() |
|
||||
Конструктор по сути (машиностроитель) Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391
|
Цитата:
А алгоритм удобно было бы сделать так (ресурсоемкий будет при большом количестве сегментов, но зато наилучший): 1. Указываем желаемое отклонение контура, начальную точку для преобразования и сторону, куда строить дугу. 2. Дуга по трем точкам - указанная, конец следующего за указанным сегмента и середина или вершина сегмента (зависит от четности анализируемых отрезков), лежащая на середине предыдущих двух точек. Результат записываем в память (как реально в программировании, надо подумать) 3. Анализ расстояния от дуги до вершин (возможно, и до середин отрезков), которые попадают в диапазон. 4. При удовлетворительном результате в качестве конечной точки берется конец следующего сегмента и анализ повторяется до превышения отклонения. Тогда предыдущий зафиксированный результат строится на экране. 5. Далее же первая точка дуги будет всегда лежать на конце предыдущей, и анализ повторяется. Вполне допускаю, что работа по реализации алгоритма будет очень трудоемкой. Поэтому скажу, что эта писанина не в качестве "сделайте, пожалуйста", а "было бы идеально". А если ещё добавить условие, чтобы оставались реально длинные прямые участки (например, левые стороны букв "Р", "В" и подобные после разбивки их контура), то вообще ![]()
__________________
Век живи, век учись - ... Последний раз редактировалось Bull, 13.11.2014 в 09:18. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Вот еще тема была: Как добавить в полилинию дуги
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Можно ли сплайн преобразовать в полилинию в AutoCAD2006? | vn | AutoCAD | 28 | 06.11.2012 05:09 |
можно ли преобразовать сплайн в полилинию? | Petrovichhh | AutoCAD | 14 | 19.10.2012 10:57 |
Как набор сочленненных дуг преобразовать в полилинию | Kotsar | AutoCAD | 14 | 31.03.2009 22:02 |
А можно ли преобразовать линию в полилинию? | VadimVG | AutoCAD | 4 | 23.08.2004 01:27 |