mindsponge.common.rots_from_two_vecs

查看源文件
mindsponge.common.rots_from_two_vecs(e0_unnormalized, e1_unnormalized)[源代码]

输入两个向量 ab ,计算由这两个向量所构成的x-y平面所在坐标系与原始坐标系之间的旋转矩阵。

a=(ax,ay,az)b=(bx,by,bz)

首先计算 a 的单位向量 e0=a|a| 作为该坐标系的x轴单位向量。

之后计算 b 在a轴上的投影长度 c=|b|cosθ=ba|a|

那么 b 向量在a轴上的投影向量为 ce0,与a轴垂直的向量即为 e1=bce0

计算 e1 的单位向量 e1=e1|e1|e1 即为该坐标系的y轴单位向量。

最后通过计算 e1e0 的外积得到 e2 ,即为该坐标系的z轴单位向量。

最后返回的旋转矩阵为 (e0x,e1x,e2x,e0y,e1y,e2y,e0z,e1z,e2z)

参数:
  • e0_unnormalized (tuple) - 作为该坐标系x轴的向量,长度为3,数据类型为标量或者shape相同的Tensor。

  • e1_unnormalized (tuple) - 构成X-Y平面的另一个向量,长度为3,数据类型为标量或者shape相同的Tensor。

返回:

tuple,两个向量的旋转矩阵 (e0x,e1x,e2x,e0y,e1y,e2y,e0z,e1z,e2z) ,数据类型为标量或者shape相同的Tensor。

支持平台:

Ascend GPU

样例:

>>> import mindsponge
>>> v1 = (1, 2, 3)
>>> v2 = (3, 4, 5)
>>> ans = mindsponge.common.rots_from_two_vecs(v1, v2)
>>> print(ans)
(0.4242640686695021, -0.808290367995452, 0.40824828617045156, 0.5656854248926695,
-0.1154700520346678, -0.8164965723409039, 0.7071067811158369, 0.5773502639261153,
0.4082482861704521)