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

23/06/2015

Использование метода Transform.CreateRotationAtPoint

Вопрос: Я пытаюсь взять точку в трехмерном пространстве и повернуть ее на 180 градусов относительно другой базовой точки. Мне кажется, что я нашел правильный метод для этого, но не могу разобраться как им воспользоваться.

Вот иллюстрация того, что я хочу сделать:

 

Как мне задать ось для вращения с помощью XYZ? У кого-нибудь есть поясняющий рисунок? Я не могу найти какую-либо документацию по этой проблеме. Я хочу повернуть точку в плоскости XY.

Угол задается в радианах. Вот такой метод я использовал:

Код - C#: [Выделить]
  1.   Transform t = Transform.CreateRotationAtPoint(
  2.     new XYZ( Origin.X, Origin.Y, Origin.Z + 1 ),
  3.     Math.Pi, Origin );
  4.  
  5.   t.whatMethodHereToGetNewXYZLocationOfPoint?

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

Спасибо.

Ответ: Метод Transform.CreateRotation делает вращение принимая в качестве аргументов два параметра – Ось вращения и угол вращения.

Метод CreateRotationAtPoint содержит 3 аргумента: ось, угол вращения и базовую точку.

Чтобы задать ось координатой XYZ просто рассматривайте XYZ как вектор, а не как точку.

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

В вашем случае, для поворота точки pOld на 180 градусов и получение координат, повернутой относительно базовой точки, точки pNew в плоскости XY, т.е. вокруг оси Z, можно воспользоваться следующим методом:

Код - C#: [Выделить]
  1.   XYZ axis = XYZ.BasisZ;
  2.   double angle = Math.PI;
  3.   Transform t = Transform.CreateRotationAtPoint(
  4.     axis, angle, base_point );
  5.   XYZ pNew = t.OfPoint( pOld );

Источник: http://thebuildingcoder.typepad.com/blog/2015/06/create-duct-pipe-and-point-transform.html#3

Автор перевода: Виктор Чекалин

Обсуждение: http://adn-cis.org/forum/index.php?topic=2815

Опубликовано 23.06.2015