11 answers · asked · Lesson: Rolling Ball · Course: Blender Animation Bootcamp

## How to avoid "Too slow / Too fast" rotation tip

It's quite easy.
Select your object, look at its height, divide that by 2. That's a radius.
Use that number to calculate the circle of your ball (2 *3.14 * radius).
That's the length of the path your ball has to pass from point A to point B to rotate 360 degrees sharp. Just measure it on the X-axis.

• This only holds true while speed is constant. If there is any acceleration, the math gets a little more complicated, but it is a good place to start and get a figure for total rotation. If you want to be real precise you would need to get distance travelled each frame and find the angle of rotation that would give you the corresponding arc length. It’s possible to automate this (and many good rigs will), but the point of the exercise here is to train your eye.

• I know that this is a late reply, but maybe waylow or someone else will still see the question.

I'm just wondering - how would this would be done in a rig. High level pointers?

Also, to solve the rotation exactly in this problem, it should be simple to calculate rotation based on the x position exactly. So making a python script that calculates the y rotation channel based on x position at every keyframe would work. The only problem is, if we manually fiddle with the x channel interpolation curve (by moving the handles), it'd have to be the same interpolation curve for the y rotation channel. To match the interpolation curve exactly on every frame, maybe I could:

1) Try to set y rotation for every frame. I don't think this could be done in a script (unless I set every frame to be the keyframe), because I can't manually set interpolated frame values, right?

2) I could try to make the interpolated shape be exactly the same by appropriately matching the handles. Since every Bezier curve is exactly determined by the 2 points and their right/left handles, I can exactly set the y-handles appropriately (I haven't calculated the exact formula, but it shouldn't be too bad).

Am I missing something trivial here? Sorry for the noob rambling, I'm just trying to learn :P

• Actually, just copy-pasting keyframes from x position to Y rotation will not only copy keyframes and handles, but also convert units (i.e. I had 5m for rotation and handle values, it got converted automatically to 360 * 5 / 2pi = 286 degrees). So simple copy-pasting just works in this case.

But, copy pasting is pretty bad because it won't respect changes (i.e. if I modify x position I'll have to copy-paste into y again). Is it possible to make two channels share the same underlying keyframe data (maybe using groups or something, or do I need drivers)?

• ccarbs if that is what you want to do:

hover over the X-Location, right-click and: Then hover over the Y- Rotation and right-click and Paste Driver.

At least, that is the easiest way.

Definitely not the idea of this exercise of course ;)

• Thanks!

• If I see your rolling ball and it's perfect, I will know that you cheated carbs ;)

The idea is to train the eye and your skills with the Graph Editor.

• You are right.
And yes, sure, you could divide and multiply any kind of frames and angles.

• Yep the point is 'training'.  It will train your eye as well as build your skills with the GE.

You should never have to do something like this in 'the real world' haha

• Apart from everything that has already been said here: why do you divide the height by 2 to get the radius and then immediately multiply that radius by 2 again, without ever using the radius???

Computers are really fast at calculating, but there is no reason to let them perform unnecessary math operations;)

• "Apart from everything that has already been said here: why do you divide the height by 2 to get the radius and then immediately multiply that radius by 2 again, without ever using the radius???"

Since the initial formula is 2π R. Just a safety measure so nobody would ask "where this radius came from?"
Don't think you need a computer to calculate that.

• Thanks for the tip!