Julia AffineTransforms 旋转角度的符号

Julia AffineTransforms sign of rotation angle

我正在使用 AffineTransforms 旋转体积。我现在对旋转角度的符号感到困惑。对于右手系统,当向下看一个轴时,比如 Z 轴,逆时针旋转 XY 平面应该是正角度。我定义了一个旋转矩阵r = [0.0 -1. 0.0; 1.0 0.0 0.0; 0.0 0.0 1.0],就是沿Z轴逆时针旋转90度。实际上,r * [1 0 0]' 给出了 [0 1 0]',它将 X 轴旋转到 Y 轴。

现在我定义一个体积v.

3×3×3 Array{Float64,3}:
[:, :, 1] =
 0.0  0.0  0.0
 0.0  0.0  0.0
 0.0  0.0  0.0

[:, :, 2] =
 0.0  0.0  0.0
 1.0  0.0  0.0
 0.0  0.0  0.0

[:, :, 3] =
 0.0  0.0  0.0
 0.0  0.0  0.0
 0.0  0.0  0.0

然后我定义tfm = AffineTransform(r, vec([0 0 0])))tfm = tformrotate(vec([0 0 1]), π/2)一样。 然后 transform(v, tfm)。旋转中心是输入数组中心。我得到了

3×3×3 Array{Float64,3}:
[:, :, 1] =
 0.0  0.0  0.0
 0.0  0.0  0.0
 0.0  0.0  0.0

[:, :, 2] =
 0.0  1.0  0.0
 0.0  0.0  0.0
 0.0  0.0  0.0

[:, :, 3] =
 0.0  0.0  0.0
 0.0  0.0  0.0
 0.0  0.0  0.0

这让我感到惊讶,因为输出是沿 Z 轴顺时针旋转 90 度。在我看来,这实际上是一个-90 度的旋转。有人可以指出我做错了什么吗?谢谢。

诚然,这也让我感到困惑。必须再次阅读 transformTransformedArray 的帮助。

首先,数组的打印顺序有点混乱,第一个索引显示在列中,但它是X轴,因为v的维度在这个x,y,z订单。

在原来的v中,我们有v[2,1,2] == 1.0。但是,默认情况下,transform 使用数组的中心作为原点,因此 2,1,2 相对于中心 (0,-1,0),即负 y 轴方向的单位向量。

transform 返回的数组具有在 x,y,z 处计算的值,方法是在 tfm((x,y,z)) 处给出原始 v 的值(参见 ?TransformedArray ).

具体来说,我们有 transform(v,tfm)[1,2,2]v[tfm((-1,0,0))] 也就是 v[(0,-1,0)](因为逆时针旋转 (-1,0,0) 是 (0,-1,0))在未居中的 v 索引中是 v[2,1,2]。最后,v[2,1,2] == 1.0 就像问题的输出一样。

坐标变换总是很棘手,很容易混淆变换和逆变换。

希望对您有所帮助。