计算-来自旋转角度的方向值

问题描述 投票:0回答:2

不确定我是否应该在这里或Stackexchange的数学部分询问。

我有一个3个旋转角的向量(即,绕x,y,z轴)并希望创建一个对象将需要的方向向量,如果应用了3个旋转角度,即dir(a,b,c)

我想使用PythonOCC,所以我创建的对象看起来像

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

所以它是gp_Dir()的正确值,我想计算是否该对象将以3个旋转角度的向量旋转。

python geometry cad
2个回答
0
投票

您需要按所需顺序将所有matrices of rotation around axes相乘(注意顺序很重要)。

ResultingRotMtrx = RotX * RotY * RotZ

然后将初始方向(在您的情况下为(0,0,1))矢量乘以该ResultingRotMtrx,以获得最终方向。


0
投票

您可以递增地应用多个旋转角度(请参见gp_Trsf::SetRotation(gp_Ax1 theAxis, Standard_Real theAngle),获取轴和角度),或在Open CASCADE Technology中使用以下工具:

  1. gp_Quaternion类的形式定义累积rotation。请注意,以不同顺序应用旋转角度将导致不同的最终转换-这就是为什么存在枚举gp_EulerSequence的原因。各个领域的文献对优先顺序的选择不同。
  2. 从gp_Quaternion中<transformation gp_Trsf。 gp_Trsf不仅可以定义旋转,还可以定义统一的缩放和平移矢量。将转换gp_Trsf应用于
  3. gp_Ax2
  4. 通过
  5. BRepPrimAPI_MakeBox
  6. 或其他形状构建工具构造对象。
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);
© www.soinside.com 2019 - 2024. All rights reserved.