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]'
은 X 축을 Y 축으로 회전시키는 [0 1 0]'
]을 제공합니다. Julia AffineTransforms 회전 각도 기호
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 = tformrotate(vec([0 0 1]), π/2)
과 동일
tfm = AffineTransform(r, vec([0 0 0])))
을 정의합니다. 그 다음
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도 회전 인 것으로 보입니다. 누군가 내가 잘못한 것을 지적 할 수 있었습니까? 감사.
감사! @ dan-getz. 당신의 대답을 읽은 후에, 저는'transform'과'TransformedArray'의 도움을 다시 읽었습니다. – JHZ
그래서'transform'은 실제로 회전하기 전의 배열을 반환합니다. 그것은 변형의 역입니다. 회전이나 변환 후에 볼륨을 얻으려면 변환의 역함수를 사용해야합니다. 그 맞습니까? – JHZ
'transform'은 기본적으로 볼륨 (이 경우 1 : 3 x 1 : 3 x 1 : 3)의 점들의 표준 좌표를 취하고, 그 위에'tfm'을 적용하고 결과를'v'로 봅니다. 따라서 같은 크기의 행렬을 얻지 만'tfm'이 결과에 적용되므로 소스에 변형을 적용하려면 역변환을 사용해야합니다. –