Как построить касательную к сплайну в автокаде

Обновлено: 07.07.2024

У меня надо, чтобы точка лежала на сплайне, а как построить касательную из произвольной точки я и сама знаю.

Т.е. надо провести касательную к сплайну из другой точки сплайна - я правильно понимаю?

> Сергей.
Нет, надо БЫЛО построить прямую, касательную к сплайну, проходящую через точку, лежещую на этом сплайне.
Представьте сплайн, линию его пересекающую, и через точку пересечения требуется построить касательную к сплайну.

> Ann
Не понял! В чем отличие?

В том что касательная проводится из заданной точки пересечения сплайна и линии, те она должна быть перпендикулярна радиусу сплайна в данной точке, а больше никаких точек нет

Разве точка пересечения линии и сплайна НЕ ЛЕЖИТ на сплайне? Разве я не так спрашивал:

Т.е. надо провести касательную к сплайну из другой точки сплайна - я правильно понимаю?

> Сергей Попадьин
Я то понял чтоникакой другой точки на сплайне нет,только та что явл. результатом пересечения линии и сплайна и через нее надо провести касательную
Если же эта касательная должна проходить через другую точку сплайна, то задача усложняется и может не иметь решений.

Помогите, как построить касательную к сплайну в его произвольной точке? (точка его пересечения с некоторой прямой).

Можно, например, постороить перпендикуляр (_xl per) к точке сплайна, ну а уж к нему второй _xp per. Вот тебе и касательная.

Спасибо.
Я и раньше смотрела _xline, но там же подсказка [Hor/Ver/Ang/Bisect/Offset].
И никакого Per не предлагается.
Привет разработчикам.
Предлагаю выпустить игру в стиле quest по мотивам Автокад :)

> Ann
По-моему это и есть касательная.
Защиты не делаю.

> Эдуард
Спасибо. Пока ZDN не ответил как раз и приходилось смотреть в сторону функции vlax-curve-getFirstDeriv. Не совсем был понятен смысл что есть 3D-vector, т.е. интуитивно вроде было ясно, что это относительные координаты второй точки касательной, но руки выяснить не доходили, ждали что кто-нибудь предложит решения попроще, чем писать программу для отрисовки касательной. Тем более что построить ее надо было всего один раз.
Но необходимость отрисовки касательную програмно скорее всего возникнет, так что спасибо за пример.

Вообще в Инете находил небольшую утилитку. Несмотря на глючный интерфейс: после перегрузки Акада приходится ей меню каждый раз подгружать, а переделать лень:(, кроме того при операции с точками присваивает им свой стиль отображения, а вот тут уже нифига не поделаешь (.fas файл), только если меню свое сделать, имеет полезные команды:
- касательная к кривой;
- измерение расстояний между точками по кривой;
- откладывает точку на заданное расстояние по кривой от указаной точки;
- еще что-то.
Работает с полилиниями, сплайнами. С другими примитивами не помню.

Имеешь значит сплайн. Затем при построении линии указываешь точку старта, а затем нажимаешь Shift и правую кнопку мыши. В списке выбираешь Tangent и спокойненько строишь касательную.

Задача в следующем: имеется 2 окружности разного диаметра, произвольно расположенные в пространстве, надо провести линию являющуюся касательной к обеим окружностям.

Метод последовательных приближений не предлагать.

П.С. Задача должна быть решена средствами акада в т.ч. и посредством лиспа.

__________________
АвтоКАД это не только электронный кульман,
Но и великий ГЕМОР В случае расположения окружностей в одной плоскости можно использовать для начальной и конечной точек отрезка объектную привязку "_tan" ("кас"). Возможность проведения касательной к двум окружностям, произвольно расположенных в ПРОСТРАНСТВЕ, вызывает сомнение.

1. Имеем две окружности: малая О1, большая О2.
2. Строим отрезок С, соединяющий центры О1,О2.
3. Точку пересечения С и О2 именуем Т1.
4. Откладываем на отрезке С от точки Т1 к центру О2 величину радиуса О1. Это точка Т2.
5. Из центра О2 строим окр. через Т2. Это окружность О3.
6. Из центра О1 проводим касательную K к О2. Точка пересечения К и О3 это Т3.
7. Прводим луч Л из центра О2 и точку Т3. Точка пересечения данного луча с О2 это Т4.
8. Копируем К в точку Т4. Последний примитив и будет касательной к двум окружностям.

проверка правильности построений:
1. Строим перпиндикуляры к отрезку С в его концах.
2. Измеряем углы:
- между С и К;
- между Л и перпиндикуляром к отр. С,
убеждаемся, что они равны.

Поскольку окружность это плоская фигура, то и касательная должна быть в той же плоскости. т.о. провести касательную к окружностям в разных плоскостях невозможно.
Можно провести касательную к 2 шарам (ну или сферам)
все остальное как написал Profan

1. Имеем две окружности: малая О1, большая О2.
2. Строим отрезок С, соединяющий центры О1,О2.
3. Точку пересечения С и О2 именуем Т1.
4. Откладываем на отрезке С от точки Т1 к центру О2 величину радиуса О1. Это точка Т2.
5. Из центра О2 строим окр. через Т2. Это окружность О3.
6. Из центра О1 проводим касательную K к О2. Точка пересечения К и О3 это Т3.
7. Прводим луч Л из центра О2 и точку Т3. Точка пересечения данного луча с О2 это Т4.
8. Копируем К в точку Т4. Последний примитив и будет касательной к двум окружностям.

проверка правильности построений:
1. Строим перпиндикуляры к отрезку С в его концах.
2. Измеряем углы:
- между С и К;
- между Л и перпиндикуляром к отр. С,
убеждаемся, что они равны.

>nmr
Ну ты даешь :P См. что Profan написал, касательная строится в пару щелчков мыши.

>Asys
Ну ващето nmr все правильно написал (спасибо), но уж очень сложно.

Тему можно считать закрытой.

__________________
АвтоКАД это не только электронный кульман,
Но и великий ГЕМОР Вот тут сразу и видна разница между кульманом и AutoCAD'ом. На кульмане строить касательную к окружностям - гемор, а в AutoCAD'е - запросто. Задача должна быть решена средствами акада в т.ч. и посредством лиспа. Если только средствами Акада - то достаточно _TAN
Если лиспом - то все равно придется высчитывать ориентировочные точки касательных для _TAN. Иначе результаты могут быть непредсказуемы.
А в таком случае проще их (точки) сразу рассчитать лиспом математически. И обойтись без _TAN.

Вернусь к касательным.
А есть ли возможность построить касательную от окружности просто в произвольно выбранной точке на этой окружности? Имею ввиду - без построения линии от этой точки к центру этой окружности.
И тот же вопрос о перпендикуляре.
Т.е., как построить перпендикуляр ИЗ произвольной точки уже начерченной прямой.

Конструктор, инженер-механик на пенсии

Задача должна быть решена средствами акада в т.ч. и посредством лиспа. Если только средствами Акада - то достаточно _TAN
Если лиспом - то все равно придется высчитывать ориентировочные точки касательных для _TAN. Иначе результаты могут быть непредсказуемы.
А в таком случае проще их (точки) сразу рассчитать лиспом математически. И обойтись без _TAN. Так то оно так, токо вот беда у двух окружностей может быть четыре варианта построения касательных, как ни крути все равно придется выбирать, а если выбирать варианты самому то какой смысл делать лисп?

Дороги, Конструкции, Тоннели

РОВНО ЗА 7 ЩЕЛЧКОВ МЫШИ.

1 Нажимаем чертить линию
2 При нажатом CTRL щелкаем правой кнопкой мыши
3 Щелкаем КАСАТЕЛЬНАЯ
4 Щелкаем на 1-й окружности
5 см щелчек 2
6 см щелчек 3
7 Щелкаем на 2-й окружности

Время 10 сек. максимум.

РОВНО ЗА 7 ЩЕЛЧКОВ МЫШИ.

1 Нажимаем чертить линию
2 При нажатом CTRL щелкаем правой кнопкой мыши
3 Щелкаем КАСАТЕЛЬНАЯ
4 Щелкаем на 1-й окружности
5 см щелчек 2
6 см щелчек 3
7 Щелкаем на 2-й окружности

Время 10 сек. максимум.

Тоже самое что и просто привязка к окружности (такая же точность).Этот вариант не проходит.
Если я правильно понял автора. . Этот вариант не проходит.
Если я правильно понял автора.

Именно так.
Нет никаких вторых точек и вторых окружностей.
Нужна просто касательная (неважна её длина и направление от точки на окружности).
В итоге, она предназначена как вспомогательная для определения углов между ней (касательной) и другими линиями.

И по перпендикуляру ОТ прямой - есть способ построения?

Ещё касательную можно построить след. образом

Команда _xline , указать привязку Tangent (касательная), указать окружность, к которой строится касательная. Далее, обратите внимание, мы при помощи мышки можем перемещать эту прямую, которая обкатывается по окружности

Так-же строится перпендикуляр

_xline, привязка Perpendicular (Перпендикуляр), выбираем прямой участок того, к чему хотим приперпендикуляриться, и , двигая мышкой, выбираем место расположения перепендикуляра

Хмурый,
все мои потуги сделать касательную, ну ни к чему не приводят.

Заготовил две произвольные окружности, которые пересекаются между собой (соответственно, в двух точках).
Пытаюсь в одной из точек их пересечения, указанным Вами способом, построить касательную - сначала к одной из них.

1. Даю команду _xline.
2. Указываю привязку Tangent (касательная)
3. Указываю окружность, к которой строится касательная. Левый щелчёк. Просит точку.
4. Указываю интересующую меня - точку пересечения окружностей (или произвольную точку на окружности). Результат: "Specify through point: *Invalid*"

Аналогично, если указываю точку произвольно, вне (снаружи) окружности (т.е., произвольно щёлкаю левой - так же пишет: " Specify through point: *Invalid*"
А дальше - ничего никуда не обкатывается.
И ничего не строится.

Пробовала в 2006. Странная штука получается. Первую точку действительно хватает с только ему (А2006) известной логикой, но определяет ее, как касательную (если можно так назвать точку). Из этой точки к другой окружности проводит касательную правильно. Оставляю эту прямую и повторяю команду. На этот раз строит правильно. Несколько раз пробовала с разными окружностями. Такое впечатление, что в первый раз он примеряется к окружностям, а потом ориентируется.

Для построения касательной к двум окружностям используют простую _line

Че-то мне казазалось, что это у меня в старых версиях получалось без проблем. Точно не помню, врать не буду.

> Hrenn
А почему так категорично используют? Это где-то в руководствах написано? В таком случае у этой самой первой точки, котрая выбирается вместо касательной, должна быть какая-то логика. Какая, Вы не в курсе?

включите
Object Snap Tracking on
(F11)
и наслаждайтесь.
первой точка берется tangent от Lastpoint. Аминь.
ACAD2006

в 2008 по умолчанию все работает

> Кипятильник
Причем тут Объектное отслеживане?
А насчет последней точки, да, похоже. Обидно и неудобно, хотелось бы строить сразу полилинию, а не преобразовывать в полилинию построенный отрезок.

> Alexey
Работает именно с полилиней?

Ни черта в 2008 ничего не работает. Все точно так же, как и в предыдущих версиях. Нормальная касательная получается только ко второй окружности.

Блин, рисуем две circle. Затем говорим- xline. Acad спрашивает: укажите первую точку. Жмём Shift и из выпавшего списка выбираем Tangent. Acad опять спрашивает: укажите вторую точку. Подводим курсор к второй окружности, опять жмём Shift, из выпавшего списка выбираем Tangent-ВСЁ . :)

> Garden Tide
Блин, речь идет о том, как провести касательную ПОЛИЛИНИЮ (1 сегмент) к двум окружностям.

> Helga
". Причем тут Объектное отслеживане. "
Вообще то, я не знаю что такое ОБЪЕКТНОЕ ОТСЛЕЖИВАНИЕ и АУТОКАД я тоже не знаю.
А Object Snap Tracking "on" наглядно демонстрирует откуда растут ноги в "realtime". Проникание в тему увеличивается на порядки, это даже СТУДЕНТКИ знают ))

> Владимир Громов
ну, добро, ПАБИДИЛ.
Sorry за недосмотр.
Пы.Сы.
Прога работает, спасибо, применим для широких масс населения :)

Спасибо всем за участие. По крайней мере, если это и глюк, то не только моей версии Автокада. Значит я не одинока. :)
Только вопрос был такой: невозможность построения первого сегмента полилинии касательным к двум окружностям - это глюк или норма, если норма, то имеет ли она обоснование. Все.
Судя по тому, что обоснования не прозвучало, это прижвшийся глюк.

> Helga
обоснование, в бесконечности универсальности.
Pline универсальней Line, но не до бесконечности. В общих случаях Pline рисует первый отрезок, а следующая дуга, входящая в Pline, автоматом будет касательной. Спрашивается, нужно (в общем случае) усложнять "ядро" и интерфейс команды Pline? Ради пары частных случаев? Для этого есть механизм открытой платформы AutoCAD. Что и показал > Владимир Громов (2007-04-14 12:31:14)
Как бы, у Вас постановка вопроса: "Что-бы было" или таки конкретная, повседенвная, повсеминутная задача?
На уровне интуиции: есть еще команды Fillet, Chamfer и т.п.
PS IMHO со временем, когда AutoCAD будет занимать в ОЗУ терабайты, а на диске гигабайты терабайтов в AutoCAD`е будет в Polyline долгожданное построение касательных к двум окружностям, и оно будет даже интуитивно понятно. А может и раньше.

Прошу прощения у Администратора - указанные ссылки не совсем по моей теме. Поэтому переименование Вами темы не совсем точно. Еще раз, извините.

> Кипятильник
"На уровне интуиции: есть еще команды Fillet, Chamfer и т.п."
На уровне моей интуиции сопряжение, а тем более фаска никак не может решить этой проблемы :)
Если Вас интересует, что я хочу получить - отвечу - мне нужна замкнутая полилиния, состоящая из четырех касательных сегментов: двух дуг и двух отрезков. Задача необходимая не каждый день, но периодически всплывающая. Исходные данные: расстояние между центрами дуг и их радиусы. Более оптимального варианта, чем построение окружностей и касательных к ним отрезков, с последующей обрезкой и преобразованием в полилинию, мы пока не нашли. Просто было бы приятно, чтобы хотя бы один из отрезков уже был бы полилинией, тогда остальные сегменты можно было бы присоединить к ней с помощью новой команды Соединить (не знаю как она звучит в английской версии) вместо старой pedit. Ну раз не строится - обойдемся или воспользуемся программкой Владимира Громова.
Для тех, кто наткнется на те же грабли и воспользуется поиском по форуму:
Построить полилинию касательную к двум окружностям, не используя макросов, нельзя
Думаю, дальше надоедать форумчанам касательными нет причин. И не буду. :)

если Ваша задача на 100% соотвтествует Вашей постановке, то например :

код "как есть"
подвохи
1. не тестил на русскоязычной версии (возможно PI по другому пишется)
2. происходит потеря точности. то ли на PI, то ли в формуле. Вылавливать некогда.
3. на граничные условия не ловил.

Тему читают: 1 гость

Форумы CADUser → Autodesk → AutoCAD → AutoCAD 2005. Не могу построить касательную к двум окружностям

Форумы CADUser → Autodesk → AutoCAD → Как построить касательную для точки размещенную на сплайне?

Тема: Как построить касательную для точки размещенную на сплайне?

Каким методом можно в Акаде построить косательную к конкретной точке на сплайне?

Изменив привязку на "касательную"

Легко сказать - однозначно не получается. Это не дуга, где можно провести прямую через центр дуги и нужную точку.

> kpblc
Смешно.Сам не первый год замужем.
Нужно не из точки к сплайну касательную, а к определенной точке на сплайне косательную.

> Job
Если в нужной точке линии сплайна сделать разрыв, а потом от точки разрыва продлить линию сплайна до какой либо линии то продолжение и будет прямая, касательная в точке разрыва. Но сомневаюсь в идеальности этого способа, так как после обрезки, линия сплайна превращается в полилинию, состоящую из коротких прямых участков.
Если линию сплайна не обрезать, а концы продлить (удлинить) то продолжение будет прямой линией и касательной к концам линии сплайна.
Во втором случае сплайн сохраняет свои свойства и имеет касательную в конечных точках.
Вариант построения касательных к конкретным точкам линии сплайна зависит от типа и смысла этой процедуры, а так как цель этого мероприятия не ясна, то способ построения касательной к линии сплайна этими двумя способами не ограничивается и может иметь ещё несколько.

> Valery Brelovsky
Смысл оэтой косательной в "построении касательной к кривой графика, построенной по точкам. Пересечение косательной с осевой линией дает искомую переменную".
Поэтому метод разрыва сплайна неприемлем. Если есть еще методы построения косательных, выслушаю с признательностью.

IMHO два раза.
Касательную или нормаль в конкретной точке сплайна построить нельзя. Кривизна переменная.

Если взять прямую _xline и первую точку привязать касательной привязкой в любой точке сплайна - то эту прямую можно "перекатывать" по всему сплайну и она будет касательной

Перекатываться-то она будет, но вы остановите ее в какой-нибудь точке (скажем, с привязкой "_nea") и посмотрите, что получилось. У меня получилась фигня.

С помощью лиспа, задача имеет простое решение.
Можно найти первую производную для любого контура, в том числе сплайна, в любой точке, на этом контуре.
Зная точку и вычислив направление, можно построить касательную любым объектом.
Если задача постоянная, давайте развернутое пояснение и будет вам программа.

Применить команду _offset к сплайну. (Следить, чтобы на новом сплайне не было изломов). От указанной точки на исходном сплайне построить перпендикуляр к новому сплайну.

> Hrenn
А дальше? К новому-то сплайну получится перепендикуляр, а к исходному? А потом что, провести перпендикуляр к построенному перпендикуляру? Будет ли этот перпендикуляр касательным к сплайну? Сомневаюсь.

> Евгений Елпанов
Можно, конечно, найти касательную к кривой, если известно ее уравнение, а в данном случае? Известно ли уравнение сплайна? Вообще, мне кажется, что должно получится две касательные - "справа" и "слева" от нужной точки, а в самой точке неопределенность.

> Владимир Громов
Погоди, как только доберусь до работы, набросаю примерчик.

А потом что, провести перпендикуляр к построенному перпендикуляру? Будет ли этот перпендикуляр касательным к сплайну?

А вы уверены что в Атокаде сплайн, о котором говорите описывается кривой с переменным радиусом, а не ломанной полилинией?

> Hrenn
Как проверить? Я бы с радостью, да не знаю как. Вот Евгений Елпанов доберется до работы и разберется.

Кажется, пока добирался до работы, меня опередили.
Все равно выкладываю свой вариант, хотя он и похож на предложенный выше.

Я делал так:
1.Начертил произвольный сплайн.
2.Установил точку (point) на сплайне (формат изображенния точки для удобства-"х").
3.Установил первую точку "XLINE" в данную точку "х" на сплайне (привязка "node").
4.По запрсу командной строки "Specify through point" установил вторую точку "XLINE" в ту же точку -"х" (привязка "node").
5.Повернул "XLINE" на 90 градусов в данной точке "х" (команда "ROTATE", обьект "XLINE", base point- установленная точка "х").

> VVA
Если захочется привязаться к конкретной точке, скажем, к пересечению или к концу сплайна, то программа вылетает аварийно.

> Евгений Елпанов
Если захочется привязаться к конкретной точке, скажем, к пересечению, то результат может быть не тот, которого ожидали.
ДЛЯ ОБЕИХ ПРОГРАММ.
Кажущаяся касательная на самом деле НЕ КАСАЕТСЯ сплайна. Это видно при большом увеличении области вблизи касания. Можно провести отрезок от произвольной точки до точки "пересечения" касательной и сплайна для выявления области касания. При сильном зуммировании видно, как касательная и сплайн расходятся. Не помогает и регенерация.

> balk
А при чем здесь сплайн? Можно просто нарисовать точку и попытаться провести через нее XLINE. Не получается:

Кажущаяся касательная на самом деле НЕ КАСАЕТСЯ сплайна. Это видно при большом увеличении области вблизи касания.

Видимо, ты нашел баг в автокаде - связанный с упрощенным отображением сплайнов на экране!
Я проверял так:
1 создал касательную к сплайну
2 с привязкой пересечения нарисовал контрольную линию из точки касания сплайна и линии
3 сильно увеличил место, отмеченное контрольной линией
4 действительно, касательная и сплайн отображаются на расстоянии, но все привязки к сплайну указывают подсказки не на отображаемом сплайне, а на касательной.
Видимо, здесь играет роль отображение на экране.
Кстати, в моей программе вычисляется точка ближайшая к указанной при выборе сплайна, но лежащая на нем, т.е. автокад, однозначно считает эту точку принадлежащей сплайну.
Если бы эта точка была бы смещена - автокад не смог бы вычислить ее параметр и первую производную сплайна для этой точки.
Короче, считаю это багом отображения!
Если опишите алгоритм, используя который, можно убедиться в обратном, сообщите, мне интересно.

Читайте также: