Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: enot от 19-12-2019, 13:05:34

Название: Curve Project To Curve
Отправлено: enot от 19-12-2019, 13:05:34
Как получить CurveC , являющийся проекцией CurveA на CurveB  по вектору XYZ dir (вектор, перпендикулярный CurveB)

(https://i.postimg.cc/cgVrrF95/Curve-Project-Curve.png) (https://postimg.cc/cgVrrF95)
Название: Re: Curve Project To Curve
Отправлено: Александр Ривилис от 19-12-2019, 13:15:17
CurveA, CurveB и CurveC - это отрезки? И вообще нет понятия проекции на кривую, а есть понятие проекции на поверхность (в частности на плоскость).
Название: Re: Curve Project To Curve
Отправлено: enot от 19-12-2019, 13:19:46
CurveA, CurveB и CurveC - это отрезки?
да , есть начальная и конечные точки
Название: Re: Curve Project To Curve
Отправлено: Александр Игнатович от 19-12-2019, 13:23:13
Так в чём проблема?

Используй метод Curve.Project для каждого конца отрезка.

Не забывай про граничный случай, когда отрезки перпендикулярны.

Если нужна только длина проекции, всё ещё проще - см. скалярное произведение векторов (DotProduct)
Название: Re: Curve Project To Curve
Отправлено: enot от 19-12-2019, 13:24:14
И вообще нет понятия проекции на кривую, а есть понятие проекции на поверхность (в частности на плоскость).
я делаю отсылку к методу Curve.Project
https://www.revitapidocs.com/2018/b87fc3e4-ea25-2a75-5b5a-53065b099d2a.htm
"Projects the specified point on this curve."
Название: Re: Curve Project To Curve
Отправлено: Александр Ривилис от 19-12-2019, 13:24:52
да , есть начальная и конечные точки
Тогда это чистая аналитическая геометрия. Впрочем можно воспользоваться методами из Revit API.
Создаёшь две Line при помощи CreateUnbound указывая точки начала и вектор проекции и находишь их пересечения (метод Intersect) с CurveB
Название: Re: Curve Project To Curve
Отправлено: enot от 19-12-2019, 13:25:25
Используй метод Curve.Project для каждого конца отрезка.
если проецировать по вектору то один конец Curve A не попадает на Curve B
Название: Re: Curve Project To Curve
Отправлено: Александр Игнатович от 19-12-2019, 13:25:51
"Projects the specified point on this curve."

Проекция точки на кривую, а не кривой на кривую
Название: Re: Curve Project To Curve
Отправлено: Александр Ривилис от 19-12-2019, 13:26:11
я делаю отсылку к методу Curve.Project
https://www.revitapidocs.com/2018/b87fc3e4-ea25-2a75-5b5a-53065b099d2a.htm
"Projects the specified point on this curve."
Это проекция точки на кривую, а не кривой на кривую.
Название: Re: Curve Project To Curve
Отправлено: Александр Игнатович от 19-12-2019, 13:27:11
если проецировать по вектору то один конец Curve A не попадает на Curve B


сделай копию кривой CurveB неограниченной, спроецируй точки, дальше немножко простой логики, как её ограничить
Название: Re: Curve Project To Curve
Отправлено: Александр Ривилис от 19-12-2019, 13:27:27
если проецировать по вектору то один конец Curve A не попадает на Curve B
Сделай на основе CurveB бесконечный отрезок.
Название: Re: Curve Project To Curve
Отправлено: Александр Ривилис от 19-12-2019, 13:28:20
Александр Игнатович,
Мыслим синхронно! :D
Название: Re: Curve Project To Curve
Отправлено: enot от 19-12-2019, 13:30:58
o Curve.Project
Цитировать
XYZPoint is the nearest point on the curve;
Получается при проекции всегда находит ближайшую точку к линии. но мне нужно именно по вектору произвести такую проекцию. если я возьму точки концов CurveA то первая при проекции по вектору Dir попадет на CurveB а вторая нет (улетит условно в бесконечность)
Название: Re: Curve Project To Curve
Отправлено: Александр Игнатович от 19-12-2019, 13:35:19
И тут внезапно оказывается, что ближайшая точка лежит на перпендикуляре.

Если сделаешь неограниченную прямую из копии отрезка CurveB - получишь то, что нужно. Для ограниченного отрезка вроде бы да, найдёт конец отрезка, если перпендикуляр лежит на прямой вне заданного отрезка
Название: Re: Curve Project To Curve
Отправлено: Александр Ривилис от 19-12-2019, 13:36:49
o Curve.Project
Я же уже написал - используй Curve.Intersect
Название: Re: Curve Project To Curve
Отправлено: enot от 19-12-2019, 13:46:22
И тут внезапно оказывается, что ближайшая точка лежит на перпендикуляре.
кажется , так и есть ...

(https://i.ibb.co/2q6KYsX/Curve-Project-Curve-result.png) (https://ibb.co/4WfNgYB)
upload images (https://ru.imgbb.com/)

Надо проверить