First, watch this:

Cool, huh? My students found this last year when we were studying rigid body rotation. One of the things we did a lot was try to spin a tennis racquet about an axis in the plane of the head and perpendicular to the handle without it rotating about the handle. It turns out it’s pretty hard and the reason is the same as the explanation for the video above.

My friend Will posted that vid recently again and I sent him the an animation I made showing a similar result.

He asked for a blog post, so here you go. To make it a fun challenge, I wanted to see if I could do it “off the top of my head,” in other words I wanted to see if I could put together the calculation without checking my notes from last spring when I was teaching this stuff (and hence it was all at my fingertips).

I knew I couldn’t do all the inertia tensor stuff off the top of my head, so I thought I’d see if I could do it with a small number of masses so that the inertia tensor benefit wasn’t huge.

First, I laid out a few point masses to model the handle in the video. I put one at the screw, two at the handle ends, and one at the crossing point. I knew I needed to calculate the location of those points for any arbitrary Euler rotation, so I had to think about Euler rotations first. Basically these are the rotations you can do to an object to put it in any orientation (without changing the center of mass which I put at the origin). It reminded me of the discussions my students and I had about how to do that (before we’d read about Euler rotations) and I decided that sounded easiest:

- Rotate about the z-axis by .
- Rotate about the y-axis by .
- Rotate about the z-axis by .

What that does is the usual theta and phi orientation for a direction from the origin and an additional phi rotation of the body around that direction. It’s not how Euler rotations are sometimes presented:

- Rotate about the z-axis by .
- Rotate about the
**new**y-axis by . - Rotate about the
**really new**z-axis by .

It just turns out that’s harder to do numerically since you have to find the new and really new axes. In Mathematica you can do my recipe by:

RotationMatrix[, {0,0,1}].RotationMatrix[, {0,1,0}].RotationMatrix[, {0,0,1}].(points you care about)

The period is how Mathematica does matrix multiplication (including dot products).

Ok, so now I need to find the locations of my 4 points and then take time derivatives recognizing that my time-dependent variables are theta, phi, and psi. The time derivatives produce the velocities that I can use to calculate the kinetic energy as a function of the variables and their time derivatives. Then I’m in business because I can just do the euler-lagrange approach at that point. Here’s a screenshot of the code:

The locs are the locations of the dots as described before with the handle screw part being 1 unit long and the handle width being that crazy square root of 3/2 + 0.01 which will make sense below. The m function is the rotation matrix described above. The newlocs function determines where all the points are at some arbitrary theta, phi, and psi and the ke is the kinetic energy (note the D used for derivative). The el function is the Euler-Lagrange operator and the sol command puts it all together, including some initial conditions set to rotate the handle as similar to the video as I could do (note that if you don’t set the psi variable to a little off zero you don’t see the instability). Here’s the result:

And here’s an animation looking at the path the screw takes (it’s animated just so the camera can sweep around)

I remembered from the intertia tensor analysis that the stable axes of rotation (among the 3 eigenaxes) are the ones with the highest and lowest eigenvalues. So I calculated those and found that when the length is sqrt(3/2) there is not one in the middle. Here’s a comparison with the length both 0.1 above and below that magic length:

Cool, huh? I hope Will’s happy.

Some starter comments for you:

- I was in that class and this really helped me understand . . .
- I was in that class and this was a complete waste of time because . . .
- I love this! What should I do with my antiquated vpython scripts that couldn’t possibly do this?
- I hate this! When I flip my tennis racquet it never rotates.
- What other initial conditions show (or don’t show) that instability?
- How did you calculate the eigenvalues off the top of your head. What you just happened to know what the eigenaxes were or something?

I might spend the rest of my day watching that video.

Pretty cool. What I’m wondering: If we think of the system as having two quasi-stables states (pointing one way and pointing the other), does it behave like a two-state chaotic dynamical system?

hmmm. That’s an interesting question. How would I test that?

I think sensitivity to initial conditions: Perturb the initial conditions slightly.. examine if and how the trajectories diverge. The system seems like the famous”Lorenz Attractor”. I think there may be clues for chaos in the unpredictability of when it will flip from one attractor to the other.