JHZ*_*JHZ 4 rotation affinetransform julia
我正在使用 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
Run Code Online (Sandbox Code Playgroud)
然后我定义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
Run Code Online (Sandbox Code Playgroud)
这让我感到惊讶,因为输出是沿 Z 轴顺时针旋转 90 度。在我看来,这实际上是一个 -90 度的旋转。有人能指出我做错了什么吗?谢谢。
诚然,这也让我感到困惑。不得不读的帮助transform和TransformedArray试。
首先,数组的打印顺序有点混乱,第一个索引显示在列中,但它是 X 轴,因为 的维度v是x,y,z按此顺序排列的。
原来v,我们有v[2,1,2] == 1.0。但是,默认情况下,transform使用阵列的中心作为原点,因此2,1,2相对于中心 (0,-1,0),即负 y 轴方向上的单位向量。
返回的数组transform具有值,这些值x,y,z通过给出原始vat的值进行评估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]在非中心v指数。最后,v[2,1,2] == 1.0正如问题中的输出一样。
坐标变换总是很棘手,很容易混淆变换和它们的逆。
希望这可以帮助。