|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Построение перпендикуляра между двумя полилиниями
Регистрация: 10.12.2008
Сообщений: 122
|
||
Просмотров: 11276
|
|
||||
Регистрация: 10.12.2008
Сообщений: 122
|
Profan, мне надо lisp-приложение написать под этот чертеж, а не чертить в AutoCad-е.
Кто-нибудь, подскажите, пожалуйста как это осуществить или, может быть, у кого-то есть уже готовый lisp на этот вопрос? Последний раз редактировалось Макс_Кунгур, 19.08.2009 в 08:04. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Макс_Кунгур, "практически" параллельные и параллельные есть вещи разные принципиально. Вплоть до невозможности решения задачи.
P.S. У меня ощущение, что надо сделать нечто типа alx-dike (кажется, так). То бишь строить изображения откосов.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.12.2008
Сообщений: 122
|
Кулик Алексей aka kpblc, 1-я линия - это кривая горизонта, 2-я линия - это подошва горизонта. Они могут быть и параллельными, и не параллельными. Как я понимаю, нужно рассматривать два случая по отдельности. Если параллельны, то так строятся перпендикуляры, если нет - то по другому.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Макс_Кунгур, так дело-то в том, что сначала надо поставить задачу. Полностью. Предусмотрев все варианты. И только после этого задумываться о решении (которое, скорее всего, сведется к применению команды _.divide с опцией _block).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.12.2008
Сообщений: 122
|
Кулик Алексей aka kpblc, задача состоит в следующем:
1. Выбираем первую полилинию 2. Выбираем вторую полилинию 3. Первая полилиния делится на отрезки одинаковой длины начиная с начала. 4. Строятся перпендикуляры по этим отрезкам, начиная с начала первой полилинии, пересекающие вторую полилинию. (перпендикуляры должны отсекаться 2-й полилинией) 6. Если вторая полилиния длиннее 1-й (что слева, что справа), обрезаем ее до первого и последнего перпендикуляра. Полилинии могут быть как параллельными так и не параллельными. Последний раз редактировалось Макс_Кунгур, 19.08.2009 в 09:17. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Для размышления о "перпендикулярах" - технология рисования
http://cad.kurganobl.ru/risovanie_otkosov.html и еще две заметки внутри. В качестве постановки задачи. А реализация простая: (ru-draw-topo-slope T T 3.0 0.5) |
|||
![]() |
|
||||
Регистрация: 10.12.2008
Сообщений: 122
|
Цитата:
Потестировал я программы dike и otkos, все хорошо, все красиво, то, что нужно, но они не реализуют: 1. Не обрезают полилинии до первого перпендикуляра и после последнего. 2. Рисуют только простой откос, а мне нужно еще чтобы еще рисовался добычной откос (чтобы был выбор, какой откос рисовать). Подскажите, пожалуйста, кто-нибудь знает, как это реализовать? Последний раз редактировалось Макс_Кунгур, 19.08.2009 в 12:33. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
А вот как раз неоднозначностью расчет геометрии. Опорных точек-то у полилинии, сглаженной дугами, не добавляется. Вот и целевые высчитываются неправильно. Это внутренние недостатки штатных функций.
Цитата:
Здесь 4 аргумента определяют варианты рисования бровок и штрихов. Можно сделать сколько угодно вариантов. Тут важно забыть про "обрезают", "удлиняют". И особенно - слово "перпендикуляр". Всё только на геометрических вычислениях должно быть. Можно ведь и координаты концов бровок изменить, если надо. Цитата:
|
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
>>Это внутренние недостатки штатных функций
т.е. не учитываются скругления, обрабатываются как прямые? >>Тут важно забыть про "обрезают", "удлиняют". >>И особенно - слово "перпендикуляр" Я бы заменил "перпендикуляр" на "ближайшая" тогда получится: 1 measurим линию от которой строим с нужным шагом 2 measurим линию к которой строим с более мелким (в пределах разумного, с учетом нужной точности) шагом 3 перебераем токи из (1) ишем ближайшие им точки из(2) и их соединяем. шаг 3 легко оптимизируется, поиск прекращается как только растояние начинает увеличиваться, с каждлой итерацией поиск начинается в месте где закончился предидущий раз edit: забыл что нужно учесть направление полилиний и искать или с начала или с конца второго списка |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
(ru-draw-topo-slope T nil 3.0 0.5) [FONT=Arial]Но пытаться запускать бесполезно - это же только маленькая часть необходимого, самый верхний уровень. Общий алгоритм. А для работы требуется ещё десятка три маленьких функций. Выискивать их и выкладывать у меня нет никакого желания. [/FONT] Я же писал - "Самое главное - остальное сам сделаешь" |
|||
![]() |
|
||||
Регистрация: 10.12.2008
Сообщений: 122
|
Все-таки кто-нибудь мне может помочь в моем вопросе? Задачу можно теперь обозначить следующим образом:
1. Выбираем первую полилинию 2. Выбираем вторую полилинию 3. Задаем шаг чередования линий откосов. 4. Выбираем вид откоса (простой или добычной). 5. Откосы рисуются. |
|||
![]() |
|
||||
На самом деле алгоритм построения откосов не сложен:
хоть по перпендикуляром, хоть по "равномерно", хоть обычный, хоть укреплённый, хоть с фиксированной длинной коротких штрихов, хоть в % от длинного. Программа Самое неприятное, что на сложных контурах, откус получается не корректным, и приходиться руками разгонять штрихи, приводя к "красивому" виду, над этим я сейчас работаю - редактирование откосов после построения... В кратце: есть 3 списка список1 – координаты по бровке с заданным шагом список2- координаты по подошве с (* 50 заданным) шагом список3 – пары порядковых номеров координат из список1 и список2 ((0 0)(1 50)(2 100)(3 150)(4 200)(5 250)(6 300)(7 350)(8 400)…) по списку3 строю лини. Псле указания штриха и его нового положения получаю, например (7 567), Вопрос: Как плавно разогнать в списке3 порядковые номера координат из списка2
__________________
Почему все вдруг становятся умными, когда уже не надо? Последний раз редактировалось Disney, 24.08.2009 в 12:02. |
||||
![]() |
|
||||
Да.
Принцип такой: 1) Нарисовали мы наши штрихи, на каком-то временном слое - Temp435 2) Выдаём запрос на редактирование 3) Просим указать штрих entsel (запрещая любой выбор кроме линии на слое Temp435. 4) Получаем координату начала указанного штриха vlax-curve-getStartPoint 5) Находим порядковый номер координаты в списке1 vl-position (например 7) 6) По 7 в списке3 находим, пару порядковых номеров assoc (получаем (7 350)) 7) Просим указать новое положение штриха на подошве getpoint, (запрещая любой ввод кроме координат содержащихся в списке2) включена привязка только узел, на подошве до окончания работы программы остаются точки от _divide 8) Находим порядковый номер координаты в списке2 vl-position (например 567) 9) Теперь нужно из списка3 ((0 0)(1 50)(2 100)(3 150)(4 200)(5 250)(6 300)(7 350)(8 400)…) получить новый список3, что-то типа: ((0 0)(1 53)(2 107)(3 163)(4 225)(5 299)(6 400)(7 567)(8 580)...) 10) Удалить старые штрихи и построить новые, по новому списку3 11) Запрос на редактирование... Вот с 8 пунктом и загвостка, что-то наколякол, но работает не совсем корректно, и не всегда адекватно, даже выкладывать своё безобразие не стану, т.к. стыдно за использование простых циклов, при работе со списками, а не рекурсии и apply-и с mapcar-ами
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295
|
В самом примитивном варианте кажется работает.
dis расстояние между штрихами berg длина короткого штриха nah_dlina это начальная длина линии которая должна пересекать обе линии верхнюю и нижнюю. Как это сделать лучше пока не знаю Код:
|
|||
![]() |
|
||||
Регистрация: 10.12.2008
Сообщений: 122
|
Victor, потестировал твой лисп. Ты правильно говоришь, что "В самом примитивном варианте кажется работает". Спасибо за помощь! Но программы otkos и dike рисуют правильнее, а мне все таки нужно, чтобы перед рисованиями откосов программа спрашивала, какой откос рисовать (простой или добычной).
|
|||
![]() |
|
||||
Добычный - это как?
Вот мой код (пока без редактирования) Длина короткого штриха по запросу либо фиксированно в метрах (вводиться положительное), либо в % от длинного (вволдиться со знаком "-") Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Регистрация: 10.12.2008
Сообщений: 122
|
Disney, в твоем lisp-е есть некоторые недочеты:
1. "Длина короткого штриха по запросу либо фиксированно в метрах (вводиться положительное), либо в % от длинного (вволдиться со знаком "-")" - это нужно убрать, короткие штрихи при рисовании откосов должны рисоваться на 1/2 длины между полилиниями. 2. При рисовании откосов в замкнутом контуре они рисуются наклонно, а не перпендикулярно. Потестируй свой lisp на этом примере Otkos.dwg и если сможешь, исправь, пожалуйста, неточности. |
|||
![]() |
|
||||
Это не недочеты!
Цитата:
Я будучи геодезистом знал два, фиксированно 2 м и 2\3 длинного, см рисунок и выписка из условных знаков для топографических планов масштабов 1:5000 1:2000 1:1000 1:500 Цитата:
Цитата:
Тут либо перпендикулярно, как Victor предлагал, либо "равномерно", как у меня, над третьим вариантом, чтоб и перпендикулярно, и плавно, и красиво, и не пересекались, бился долго, но увы... Поэтому, остаёться ждать, когда добавлю опцию редактирования (потянул за один штрих в нужное место, и остальные сами плавненько так... за ним...)
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Хорошо, Макс
Вот, задаём только шаг штрихов (или он у вас тоже строго постоянный), и выбираем Добычный \ Обычный. Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
арифметические действия между двумя текстовыми элементами | RЯков | AutoCAD | 31 | 09.09.2016 11:13 |
Вопрос по 3D: Как образмерить угол между двумя отрезками, находящимися в разных плоскостях? | k8t | AutoCAD | 21 | 03.11.2015 09:29 |
Измерить расстояние между двумя точками в ЛИСТЕ, привязываясь к объектам в МОДЕЛИ | Кочетков Андрей | AutoCAD | 9 | 12.06.2009 22:52 |
Интерполяция между двумя точками | postbudka | Программирование | 27 | 21.05.2009 10:00 |
создание касательной между двумя окружностями | фрекен_бок | AutoCAD | 1 | 21.02.2009 22:14 |