Расчет - значения направления от углов поворота - PullRequest
0 голосов
/ 05 марта 2020

Не уверен, стоит ли мне спрашивать здесь или в разделе математики Stackexchange.

У меня есть вектор с 3 углами поворота (ie. Вокруг оси x, y, z) и wi sh для создайте вектор направления, который понадобился бы объекту, если бы были применены 3 угла поворота, т.е. dir (a, b, c)

Я хотел бы использовать PythonO CC, поэтому мое создание объекта выглядит следующим образом

BRepPrimAPI_MakeBox(gp_Ax2(gp_Pnt(0,0,0), gp_Dir(0, 0, 1)), \
                          10,10,10).Shape()

Так что это правильные значения для gp_Dir (), я хотел бы рассчитать, если объект должен был вращаться вектором 3 углов поворота.

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Вы можете применять несколько углов поворота постепенно (см. gp_Trsf::SetRotation(gp_Ax1 theAxis, Standard_Real theAngle), принимая ось и угол) или использовать следующие инструменты в технологии Open CASCADE:

  1. Определение совокупного вращения в форме gp_Quaternion класс. Помните, что углы поворота, применяемые в другом порядке, приведут к разным конечным преобразованиям - поэтому существует перечисление gp_EulerSequence . Литература в различных областях имеет различный выбор предпочтительной последовательности.
  2. Построить преобразование gp_Trsf из gp_Quaternion. gp_Trsf может определять не только вращение, но и равномерный вектор масштабирования и перевода.
  3. Применить преобразование gp_Trsf к gp_Ax2 .
  4. Построить свой объект с помощью BRepPrimAPI_MakeBox или другой строительный инструмент формы.
    gp_Quaternion aRotQ;
    aRotQ.SetEulerAngles (gp_EulerAngles, 0.1 * M_PI, M_PI, 0.5 * M_PI);
    gp_Trsf aTrsf;
    aTrsf.SetRotation (aRotQ);
    gp_Ax2 anAx2 (gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1));
    anAx2.Transform (aTrsf);
    TopoDS_Shape aBox = BRepPrimAPI_MakeBox(anAx2, 10, 10, 10);
0 голосов
/ 05 марта 2020

Вам необходимо умножить все матрицы вращения вокруг осей в необходимом порядке (обратите внимание, что порядок важен).

ResultingRotMtrx = RotX * RotY * RotZ

Затем умножить начальное направление ((0,0,1) в вашем случае ) вектором к этому ResultingRotMtrx, чтобы получить окончательное направление.

...