Сообщество программистов Autodesk в СНГ
ADN Club => Revit API => Тема начата: 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)
-
CurveA, CurveB и CurveC - это отрезки? И вообще нет понятия проекции на кривую, а есть понятие проекции на поверхность (в частности на плоскость).
-
CurveA, CurveB и CurveC - это отрезки?
да , есть начальная и конечные точки
-
Так в чём проблема?
Используй метод Curve.Project для каждого конца отрезка.
Не забывай про граничный случай, когда отрезки перпендикулярны.
Если нужна только длина проекции, всё ещё проще - см. скалярное произведение векторов (DotProduct)
-
И вообще нет понятия проекции на кривую, а есть понятие проекции на поверхность (в частности на плоскость).
я делаю отсылку к методу Curve.Project
https://www.revitapidocs.com/2018/b87fc3e4-ea25-2a75-5b5a-53065b099d2a.htm
"Projects the specified point on this curve."
-
да , есть начальная и конечные точки
Тогда это чистая аналитическая геометрия. Впрочем можно воспользоваться методами из Revit API.
Создаёшь две Line при помощи CreateUnbound указывая точки начала и вектор проекции и находишь их пересечения (метод Intersect) с CurveB
-
Используй метод Curve.Project для каждого конца отрезка.
если проецировать по вектору то один конец Curve A не попадает на Curve B
-
"Projects the specified point on this curve."
Проекция точки на кривую, а не кривой на кривую
-
я делаю отсылку к методу Curve.Project
https://www.revitapidocs.com/2018/b87fc3e4-ea25-2a75-5b5a-53065b099d2a.htm
"Projects the specified point on this curve."
Это проекция точки на кривую, а не кривой на кривую.
-
если проецировать по вектору то один конец Curve A не попадает на Curve B
сделай копию кривой CurveB неограниченной, спроецируй точки, дальше немножко простой логики, как её ограничить
-
если проецировать по вектору то один конец Curve A не попадает на Curve B
Сделай на основе CurveB бесконечный отрезок.
-
Александр Игнатович,
Мыслим синхронно! :D
-
o Curve.Project
XYZPoint is the nearest point on the curve;
Получается при проекции всегда находит ближайшую точку к линии. но мне нужно именно по вектору произвести такую проекцию. если я возьму точки концов CurveA то первая при проекции по вектору Dir попадет на CurveB а вторая нет (улетит условно в бесконечность)
-
И тут внезапно оказывается, что ближайшая точка лежит на перпендикуляре.
Если сделаешь неограниченную прямую из копии отрезка CurveB - получишь то, что нужно. Для ограниченного отрезка вроде бы да, найдёт конец отрезка, если перпендикуляр лежит на прямой вне заданного отрезка
-
o Curve.Project
Я же уже написал - используй Curve.Intersect
-
И тут внезапно оказывается, что ближайшая точка лежит на перпендикуляре.
кажется , так и есть ...
(https://i.ibb.co/2q6KYsX/Curve-Project-Curve-result.png) (https://ibb.co/4WfNgYB)
upload images (https://ru.imgbb.com/)
Надо проверить