# Interpolating Rotation Matrices

1. Jan 23, 2005

### Dissident Dan

I'm working on a skeletal animation system, and I want to interpolate the rotations between frames. The rotations are represented by 3x3 matrices.

It's easy enough to interpolate one of the axes linearly by averaging the values from the two frames and re-normalizing, but when you do this with 3 axes, they usually lose their orthogonality.

One possible way to interpolate them would be to convert them to Euler angles (which I still need to learn/figure out how to do), interpolate those, and then convert back to a matrix.

Is there any way to interpolate matrices without first converting them to another representation?

2. Jan 23, 2005

### master_coda

Not that I know of. The two standard approaches (to interpolating rotations) are to use either Euler angles or quaternions. I've never heard of any other technique.

3. Jan 27, 2005

### BobG

Of master coda's two, quaternions will probably work best.

You'll find the eigenvector for your rotation matrix. Then you rotate about your eigenvector. That's an oversimplified general description but gives the general gist.

All of your rotation matrices are orthogonal, so finding the eigenvector is pretty easy. If you think of the top row as being associated with your x-axis, 2nd with the y, 3rd with the z and think of your 1st column as x, 2nd as y, 3rd as z, your eigenvector winds up being:

x : yz-zy
y : xz-zx
z : xy-yx

There's a more formal way to find eigenvectors for matrices in general, but I honestly couldn't tell you what it is anymore (if I ever could).

The alternative is to relate your frames directly back to your reference axes using direction cosines. It's a little harder to visualize, but it works just as well.

I think the actual difference between the two methods is pretty minor, although programmers get into pretty heated debates about it. My general impression is that quaternions are considered way more cool by most programmers.