Julia Affine转换旋转角度的符号

时间:2016-10-11 20:10:10

标签: rotation julia affinetransform

我正在使用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度旋转。有人能指出我做错了什么吗?感谢。

1 个答案:

答案 0 :(得分:4)

不可否认,这也使我感到困惑。不得不再次阅读transformTransformedArray的帮助。

首先,数组的打印顺序有点令人困惑,第一个索引显示在列中,但它是X轴,因为v的维度按此顺序为x,y,z

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

transform返回的数组的值为x,y,z,并在v处提供原始tfm((x,y,z))的值(请参阅?TransformedArray)。

具体来说,我们transform(v,tfm)[1,2,2]v[tfm((-1,0,0))]v[(0,-1,0)](因为逆时针旋转(-1,0,0)是(0,-1,0)),这是{未经审核的v[2,1,2]索引中的{1}}。最后,v与问题中的输出一样。

坐标转换总是很棘手,很容易混淆转换及其逆转。

希望这有帮助。