Тема: Как найти пересечение плоскости с прямой?

Как рассечь пространство произвольной плоскостью и получить отметки на произвольно расположенной в пространстве прямой, гранях солида в местах пересечения с этой секущей плоскостью?

Re: Как найти пересечение плоскости с прямой?

Что из себя представляют эти "отметки"?

Re: Как найти пересечение плоскости с прямой?

Построить сечение 3-х мерного тела по 3-м точкам.
Команда "_section"

Re: Как найти пересечение плоскости с прямой?

Отметки в любом заметном виде. В идеале - точки.
Про "_section" спасибо - пользуюсь активно. Но - команда рассекает солид. Потом его обратно "сращивать" надо. Но это, бог с ним - полбеды.
А как быть с прямой? Для простоты - пример. Произвольная в пространстве прямая. "Рассечь" её горизонтальной плоскостью с тем, чтобы получить точку пересечения.

Re: Как найти пересечение плоскости с прямой?

1."_ Section"- не режет тело.
Тело режет-"_ Slice"
2. Измените положение системы координат в пространстве так, чтобы оси  X и Y принадлежали нужной плоскости сечения.
Постройте двухмерную полилинию (строится только в плоскости XY) от любой точки до перпедикуляра к прямой. Точка пересечения и есть след.

Re: Как найти пересечение плоскости с прямой?

В дополнение:
Построить Полилинию от(из) любой точки- значит щелкнуть мышкой на пустом месте экрана

Re: Как найти пересечение плоскости с прямой?

Sorry, конечно, Вы правы

1."_ Section"- не режет тело. Тело режет-"_ Slice"

А по второму - прямая не перпендикулярна плоскости ни в одном направлении. Поэтому ваш совет не получится применить.

Re: Как найти пересечение плоскости с прямой?

Упрощу пример.
Произвольная прямая под углом пересекает плоскость XY.
Как технологично найти точку пересечения с плоскостью и в этом месте сделать отметку (поставить точку) на прямой?

Re: Как найти пересечение плоскости с прямой?

Построить Солид с осью вытягивания по 3D прямой.
Сделать Секшен по нужной плоскости.
В плоскости Сечения провести линию
Настроить Вид экрана так, чтобы плоскость сечения стала перпендикулярна экрану и горизонтальна
Выставить UCS по экрану.
Команда _Trim выбрать линию из плоскости сечения Enter
P Enter V Enter выбрать 3D линию и Enter.
Перейти в нормальный вид экрана и Мировую СК

Re: Как найти пересечение плоскости с прямой?

1. Определить систему координат так, чтобы данная произвольная плоскость совпадала с плоскостью XY.
2. Строить отрезок
Command: LINE
Specify first point: .XY of NEAREST to {указать произвольную точку на данной прямой} (need Z): 0 Enter
Specify next point or [Undo]: .XY of NEAREST to {указать произвольную точку на данной прямой; лучше "с другой стороны" от точки пересечения с плоскостью, но можно и "на той же стороне"} (need Z): 0 Enter
Specify next point or [Undo]: Enter
3. Если конечные точки отрезка оказались по разные стороны от точки пересечения, то пересечение наглядно; в противном случае с помощью команды _LENGTHEN удлинить отрезок за прямую.

Re: Как найти пересечение плоскости с прямой?

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

Re: Как найти пересечение плоскости с прямой?

Координаты пересечения прямой, определенной двумя точками, с плоскостью, определенной тремя точками, выдает функция ilp команды 'cal (геометрического калькулятора). Цитата из хелпа:

Для определения точек пересечения служат функции ill и ilp.
ill(p1,p2,p3,p4)
Определение координат точки пересечения двух линий: (p1,p2) и (p3,p4). Все точки считаются трехмерными.
ilp(p1,p2,p3,p4,p5)
Определение координат точки пересечения линии (p1,p2) и плоскости, проходящей через три точки (p3,p4,p5).

Практически это может выглядеть, например, так.  Вешаешь на кнопку или пункт меню макрос _non '_cal ilp (cur,cur,cur,cur,cur). Когда надо что-то нарисовать в точке пересечения прямой и плоскости, вызываешь, к примеру, команду _point и на запрос указания точки жмешь эту кнопку. Будет серия из пяти запросов точки - надо ткнуть сначала две точки прямой, потом три точки плоскости. Point нарисуется как раз в точке пересечения.

Re: Как найти пересечение плоскости с прямой?

Да, забыл, если прямая и плоскость параллельны, cal выдаст ошибку.

Re: Как найти пересечение плоскости с прямой?

Андрей,
если я правильно понял, то и самих линий и плоскости может не быть вообще. Требуются только - две точки, определяющие мнимую прямую, и три - опоеделюющие мнимую же плоскость.
И все координаты последовательно можно будет вводит как с привязки, так и с командной строки.
Результатом будет точка в пространстве.
Если так - это наиболее удобный путь. Буду пробовать.
Спасибо.

Re: Как найти пересечение плоскости с прямой?

> Павел
Да, именно так.
Только не мнимую, а "ненарисованную". Две точки все равно определяют прямую, а три - плоскость. Вполне реальную.
Но у этого способа есть недостатки - надо быть внимательным при вводе точек, могут быть глюки с привязкой, нет обработки ошибок и т.д.
Конечно, самое лучшее - на этом форуме в разделе Лисп попросить кого-нибудь написать функцию, делающую то же, что и cal, но с запросом в командной строке, проверкой на параллельность и т.д., которую можно вызвать, как привязку, "прозрачно", в процессе выполнения команды. Народ там отзывчивый, может, кто сделает. Я-то не напишу, т.к. не знаю, как это вычислить математически. sad

Re: Как найти пересечение плоскости с прямой?

Во-первых, открыл для себя команду "cal"
Делаю:
пишу: cal
на запрос >> Expression
отвечаю: ilp(cur,cur,cur,cur,cur)
отмечаю подряд: 2 точки - линия, дальше 3 точки - плоскость
В командной строке пооявляются 3 координаты, написанные через пробел. Похоже - это и есть искомые вычисленные координаты пересечения линии и плоскости. Но точка не рисуется (и не должна, думаю).
Переписываю их на бумажку, жму кнопку point - и вписываю вновь. Лучше, чем ничего.
Попытки же начать с кнопки point ничего не дают - последующая команда cal уже не распознаётся.
Дело за малым - как отрисовать точку по вычисленным координатам ? Хотя бы скопировать цифры при определении координаты точки?
Прямое копирование с текстового окна всего набора цифр с последующим их подставлением в координаты точки -  не помогает.
И ещё, есть ощущение, что команду "cal" можно использовать с большой пользой. Ваше мнение?

Re: Как найти пересечение плоскости с прямой?

1.

...Попытки же начать с кнопки point ничего не дают - последующая команда cal уже не распознаётся...

Следует применять прозрачную команду '_CAL:
Command: _POINT
Specify a point: '(апостроф)_CAL
>> Expression: ilp([0,0,0],[1,1,1],[0,0,0],[1,0,0],[0,1,0])
(0.0 0.0 0.0) возвращается как ответ на запрос координатв команду _POINT
2. Чем не технологичен метод > VH (2004-11-25 18:07:27) ?

Re: Как найти пересечение плоскости с прямой?

VH
1. С рисованием точки разобрался - всё пошло. Спасибо.
2. Когда за точку пересечения надо просто зацепиться привязкой, то само построение линий и определение плоскостей (чтобы выставить систему координат) становится излишним. А в остальном - вполне.

Re: Как найти пересечение плоскости с прямой?

> Павел
Я не зря написал про макрос.
Вместо того, чтобы все это вводить вручную с клавиатуры, достаточно завести кнопку (экранную) с этим макросом.
Как это сделать, написано в любой толковой книжке по Автокаду и в хелпе. Есть даже целая книжка именно про это - "Язык макрокоманд и создание кнопок" Владимира Света.
И тогда действия будут таковы:
Вызываем команду, например, _line или любую другую.
На запрос команды "From point: " нажимаем нашу кнопку с макросом.
Появится пятикратный запрос ввода точек, указываем их. После этого макрос передает команде line вычисленную точку, и команда продолжает работу, не прерываясь.

Re: Как найти пересечение плоскости с прямой?

На всякий случай - еще раз макрос, о котором речь
_non '_cal ilp (cur,cur,cur,cur,cur)

Re: Как найти пересечение плоскости с прямой?

Начал юзать "cal"  -  "ilp(cur,cur,cur,cur,cur)".
Нестабильность замучила.
Как простенький пример.
При попытке нарисовать точку в пересечении нарисованной даже вертикальной прямой, явно пересекающую плоскость XY, точка рисуется на конце этой прямой. Хотя точка пересечения находится на её середине. Причём результаты вычисления точки пересечения - правильные (из текстового окна вычисленная Z=0.0).
Но, оставив точки-метки на концах этой прямой, и удалив саму линию - получаю нужный результат - вычисленная точка рисуется на своём месте.
По ходу работы аналогичных сюжетов - множество.
Акад 2002. Это глюк или "подводные камни"?

Re: Как найти пересечение плоскости с прямой?

> Павел
Обратите внимание - я уже два раза писал:
_non '_cal ilp (cur,cur,cur,cur,cur)
вот это самое _non и не должно давать курсору прилипать к концу отрезка при включенной объектной привязке. Т.е. на одну операцию указания точки (которая и вычисляется через cal) устанавливается режим привязки None (Ничего). После этого привязка дальше работает как обычно.
И все же попробуйте сделать макрос на кнопке. Намного удобнее.

Re: Как найти пересечение плоскости с прямой?

На _non - то я и не обратил внимания.
Спасибо, Андрей - теперь всё пошло. Теперь буду с макросом заниматься.
С уважением. Павел.

Re: Как найти пересечение плоскости с прямой?

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

Re: Как найти пересечение плоскости с прямой?

Если криволинейная повехность - это поверхность твердотельного объекта (3Dsolid'а), то все просто - команда _section с опцией _o (object) и ткнуть в дугу, сплайн, полилинию или окружность (для отрезка - просто _section с указанием двух концов отрезка и любой третьей точки). Построится сечение объекта плоскостью, проходящей через кривую (отрезок) и нужная точка ловится привязкой.
С пересечением плоскости и кривой сложнее. Простого решения не знаю. Единственное, что приходит в голову - выдавить по кривой, например, квадрат, потом _section получившегося тела плоскостью.
Это все справедливо для плоских кривых. Для 3Dполилиний и сплайнов все сложнее, навскидку ничего посоветовать не могу. Кроме того, что подобные задачи лучше решать не в AutoCAD smile)