Использование метода Transform.CreateRotationAtPoint
Вопрос: Я пытаюсь взять точку в трехмерном пространстве и повернуть ее на 180 градусов относительно другой базовой точки. Мне кажется, что я нашел правильный метод для этого, но не могу разобраться как им воспользоваться.
Вот иллюстрация того, что я хочу сделать:
Как мне задать ось для вращения с помощью XYZ? У кого-нибудь есть поясняющий рисунок? Я не могу найти какую-либо документацию по этой проблеме. Я хочу повернуть точку в плоскости XY.
Угол задается в радианах. Вот такой метод я использовал:
- Transform t = Transform.CreateRotationAtPoint(
- new XYZ( Origin.X, Origin.Y, Origin.Z + 1 ),
- Math.Pi, Origin );
- t.whatMethodHereToGetNewXYZLocationOfPoint?
И после того, как я выполнил трансформацию, как мне найти новые координаты повернутой точки?
Спасибо.
Ответ: Метод Transform.CreateRotation делает вращение принимая в качестве аргументов два параметра – Ось вращения и угол вращения.
Метод CreateRotationAtPoint содержит 3 аргумента: ось, угол вращения и базовую точку.
Чтобы задать ось координатой XYZ просто рассматривайте XYZ как вектор, а не как точку.
Ваша попытка задать ось, выглядит как смесь точки и вектора. Вы добавили нужный вектор оси Z, но к базовой точке. Хорошая попытка, но неудачная.
В вашем случае, для поворота точки pOld на 180 градусов и получение координат, повернутой относительно базовой точки, точки pNew в плоскости XY, т.е. вокруг оси Z, можно воспользоваться следующим методом:
- XYZ axis = XYZ.BasisZ;
- double angle = Math.PI;
- Transform t = Transform.CreateRotationAtPoint(
- axis, angle, base_point );
- 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