## RT 3DS - RoTate - volume, fast, tri-linear interpolation

(06/11/11)

PURPOSE

Rotate a volume by three Eulerian angles using tri-linear interpolation.

 RT [RoTate - image or volume, use average as background, bilinear interpolation] RT 3 [RoTate - volume, slow] RT 3D [RoTate - volume, fast, tri-quadratic interpolation] RT 3A [RoTate - volume, arbitrary center, quadratic interpolation] RT 90 [RoTate - image or volume, by 90, 180, or 270 degrees] RT B [RoTate - image or volume, supply Background, bilinear interpolation] RT M [RoTate - image or volume, use minimum as background, bilinear interpolation]

USAGE

.OPERATION: RT 3DS

.INPUT FILE: PIC001
[Enter the name of the file to be rotated.]

.OUTPUT FILE: ROT001
[Enter the name of the file where the rotated volume is to be stored.]

.PHI, THETA, & PSI: 10.5, 13.7, 45.8
[Enter the rotation angles Phi (around Z), Theta (around Y), and Psi: (around Z).]

NOTES

1. Program reads first volume into the memory - larger volumes may not fit. In this case use 'RT 3' instead. Unfortunately 'RT 3' gives slightly incorrect results, does not use the proper interpolation scheme, and has sign of theta reversed.

2. Tri-linear interpolation scheme is used.

3. Non-matching points are left without a change.

4. First rotation is done around Z-axis (clockwise), second rotation is done around Y-axis (clockwise), and third rotation is done around Z-axis (clockwise). All rotations are done in space coordinate system.

5. Rotation matrix used:
```
R = R(psi) * R(theta) * R(phi)
c  s  0        c  0 -s      c  s  0
-s  c  0    *   0  1  0   * -s  c  0
0  0  1        s  0  c      0  0  1
```

6. In the corners, old values are left.

7. How to rotate volumes:
If both X and Y axis rotations are needed, it may be simpler to use two rotations consecutively.
Pick a slice (either X or Y) from the volume and do a test rotation in 2D using operation: 'RT'.
Change the sign of the angle you determined using 'RT' and apply the angles as shown here.
For X rotation: 90, -angle, -90
For Y rotation: 0, -angle, 0
(Note provided by: Mike Marko)

8. Implemented by Paul Penczek.

SUBROUTINES

ROTAS3, ROTS3, BLDR

CALLER

UTIL3