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

ADN Club => AutoCAD .NET API => Тема начата: Yusuf от 21-05-2021, 15:08:49

Название: Как работать с векторами, получения перпендикуляра от получаемого вектора?
Отправлено: Yusuf от 21-05-2021, 15:08:49
Здравствуйте коллеги, вся надежда на Вас , устал уже голова отказывается понимать как все это работает. Подскажите мне надо из двух точек построить вектор, потом от начало этого вектора по Х + 5 построить перпендикуляр длина перпендикуля тоже 5 и получить точку конца этого перпендикуляра. Не могу додумать подскажите точки улетают не понятно куда. Как отсчитывать от начала вектора ?

был тут
https://adn-cis.org/forum/index.php?topic=2871.msg10474#msg10474

еще тут
https://www.caduser.ru/forum/topic48772.html

Код - C# [Выбрать]
  1. Point3d p1 = new Point3d(50, 0, 0);
  2. Point3d p2 = new Point3d(70, 20, 0);
  3. var vector3d = p2 - p1;
  4. Point3d pt3 = p2 - vector3d.GetNormal();
  5. var perpendicular = vector3d.GetPerpendicularVector();
  6. var endPoint3d = pt3 - perpendicular * 5;
  7.  
  8.  
  9. Polyline acPoly = new Polyline();
  10. acPoly.AddVertexAt(0, new Point2d(p1.X, p1.Y), -0.4141, 0, 0);
  11. acPoly.AddVertexAt(1, new Point2d(endPoint3d.X, endPoint3d.Y), 0, 0, 0);
  12. acBlkTblRec.AppendEntity(acPoly);
  13. acTrans.AddNewlyCreatedDBObject(acPoly, true);
  14.  

надо получить полилинию как на картинке

(https://i.postimg.cc/tZCjs4HB/pp.jpg) (https://postimg.cc/tZCjs4HB)
Название: Re: Как работать с векторами, получения перпендикуляра от получаемого вектора?
Отправлено: Александр Ривилис от 21-05-2021, 21:34:23
Yusuf,
Ничего не смог понять. Пока лишь могу посоветовать нарисовать средствами AutoCAD то что тебе нужно и проанализировать при помощи MGDDBG.
Название: Re: Как работать с векторами, получения перпендикуляра от получаемого вектора?
Отправлено: Yusuf от 22-05-2021, 06:37:03
Yusuf,
Ничего не смог понять. Пока лишь могу посоветовать нарисовать средствами AutoCAD то что тебе нужно и проанализировать при помощи MGDDBG.

Мне надо по 2 введённым точкам построить полининию в который есть, дуга и прямые линии, эти точки могут быть указаны в любом направлении, прямые линии параллельны вектору введённых точек а дуги на 90 градусов от вектора.
В начале полилинии должна быть дуга с радиусом 5мм и с углом 90, этот угол должен быть 90 градусов к полученному вектору. Я пытался делать так, от 2-й введённой пользователем точки отнимал первую получал вектор, потом от начала вектора отложить 5мм от и чтобы угол был 90 градусов, нужен перпендикуляр, для этого от этой точки провожу перпендикуляр (vector3d.GetPerpendicularVector()) на расстоянии 5мм это будет вторая точка дуги, а первая введенная точка пользователем т.е начало вектора.

Я кажется перпендикуляр к вектору не правильно получаю от определенной точки.
Как вектор получить понял, от 2 точки отнимаем первую, это будет вектор направленный в сторону второй?
Как получить точки от начала вектора на расстоянии 5мм и получить перпендикуляр к этой точке длина перпендикуляра тоже 5 (как на картинке из первого поста)?
Название: Re: Как работать с векторами, получения перпендикуляра от получаемого вектора?
Отправлено: Александр Ривилис от 22-05-2021, 13:28:24
Как вектор получить понял, от 2 точки отнимаем первую, это будет вектор направленный в сторону второй?
Да.
Как получить точки от начала вектора на расстоянии 5мм и получить перпендикуляр к этой точке длина перпендикуляра тоже 5 (как на картинке из первого поста)?
Код - C# [Выбрать]
  1. Vector3d v = (p2 - p1).GetNormal();
  2. Point3d p3 = p2 + v * 5.0;
  3. // Возможно вместо Math.PI * 0.5 должно быть -Math.PI * 0.5  - зависит от направления
  4. // Это поворот на 90 градусов по часовой стрелке или против часовой стрелки
  5. Point3d p4 = p3 + (v * 5.0).RotateBy(Math.PI * 0.5, Vector3d.ZAxis);
Код не тестировал, так что проверяй сам.
Название: Re: Как работать с векторами, получения перпендикуляра от получаемого вектора?
Отправлено: Александр Ривилис от 22-05-2021, 14:33:16
Вообще в данном случае можно еще проще, так как тут у нас равнобедренный прямоугольный треугольник):
Код - C# [Выбрать]
  1. Point3d p3 = p2 + ((p2 - p1).GetNormal()*Math.Sqrt(5*5+5*5)).RotateBy(Math.PI * 0.25, Vector3d.ZAxis);
Код исправил.
Название: Re: Как работать с векторами, получения перпендикуляра от получаемого вектора?
Отправлено: Yusuf от 22-05-2021, 17:30:12
Вообще в данном случае можно еще проще, так как тут у нас равнобедренный прямоугольный треугольник):
Код - C# [Выбрать]
  1. Point3d p3 = ((p2 - p1).GetNormal()*Math.Sqrt(5*5+5*5)).RotateBy(Math.PI * 0.25, Vector3d.ZAxis);

работает, только не Point3d а Vector3d возвращает. Верхний тоже работает только мне надо было от начало вектора и поэтому p2 поменял на p1 во второй строчке: Point3d p3 = p2 + v * 5.0;
Спасибо, теперь чуть что буду бежать сюда и спрашивать, потому что очень много времени трачу на тривиальные задачи.
Название: Re: Как работать с векторами, получения перпендикуляра от получаемого вектора?
Отправлено: Александр Ривилис от 22-05-2021, 23:22:58
Спасибо, теперь чуть что буду бежать сюда и спрашивать, потому что очень много времени трачу на тривиальные задачи.
Это правильная мысль. Только старайся сразу формулировать задачу так, чтобы она была абсолютно понятна.
Название: Re: Как работать с векторами, получения перпендикуляра от получаемого вектора?
Отправлено: Yusuf от 23-05-2021, 07:48:35
Это правильная мысль. Только старайся сразу формулировать задачу так, чтобы она была абсолютно понятна.
Хорошо Спасибо что Вы есть. Вроде пишу понятно, но получается что только я понимаю потом ))