views:

459

answers:

4

Does anyone have any good references for equations which can be implemented relatively easily for how to compute the transfer of angular momentum between two rigid bodies?

I've been searching for this sort of thing for a while, and I haven't found any particularly comprehensible explanations of the problem.

To be precise, the question comes about as this; two rigid bodies are moving on a frictionless (well, nearly) surface; think of it as air hockey. The two rigid bodies come into contact, and then move away. Now, without considering angular momentum, the equations are relatively simple; the problem becomes, what happens with the transfer of angular momentum between the bodies?

As an example, assume the two bodies have no angular momentum whatsoever; they're not rotating. When they interact at an oblique angle (vector of travel does not align with the line of their centers of mass), obviously a certain amount of their momentum gets transferred into angular momentum (i.e. they each get a certain amount of spin), but how much and what are the equations for such?

This can probably be solved by using a many-body rigid system to calculate, but I want to get a much more optimized calculation going, so I can calculate this stuff in real-time. Does anyone have any ideas on the equations, or pointers to open-source implementations of these calculations for inclusion in a project? To be precise, I need this to be a rather well-optimized calculation, because of the number of interactions that need to be simulated within a single "tick" of the simulation.

Edit: Okay, it looks like there's not a lot of precise information about this topic out there. And I find the "Physics for Programmers" type of books to be a bit too... dumbed down to really get; I don't want code implementation of an algorithm; I want to figure out (or at least have sketched out for me) the algorithm. Only in that way can I properly optimize it for my needs. Does anyone have any mathematic references on this sort of topic?

+2  A: 

You should have a look at Physics for Game Developers - it's hard to go wrong with an O'Reilly book.

Sherm Pendley
Completely agreed about O'Reilly books; generally was hoping for a reasonably simple algorithm to implement, but good reference is always good.
McWafflestix
+2  A: 

Unless you have an excellent reason for reinventing the wheel, I'd suggest taking a good look at the source code of some open source physics engines, like Open Dynamics Engine or Bullet. Efficient algorithms in this area are an artform, and the best implementations no doubt are found in the wild, in throroughly peer-reviewed projects like these.

psoul
I agree in that I don't necessarily want to reinvent the wheel, although this is sort of a learning project for me, and figuring out how to get the equations into an efficient algorithm is a fun challenge for me; that said, I probably wouldn't be able to get anywhere close to their efficiency...
McWafflestix
+3  A: 

Well, my favorite physics book is Halliday and Resnick. I never ever feel like that book is dumbing down anything for me (the dumb is inside the skull, not on the page...).

If you set up a thought problem, you can start to get a feeling for how this would play out.

Imagine that your two rigid air hockey pucks are frictionless on the bottom but have a maximal coefficient of friction around the edges. Clearly, if the two pucks head towards each other with identical kinetic energy, they will collide perfectly elastically and head back in opposite directions.

However, if their centers are offset by 2*radius - epsilon, they'll just barely touch at one point on the perimeter. If they had an incredibly high coefficient of friction around the edge, you can imagine that all of their energy would be transferred into rotation. There would have to be a separation after the impact, of course, or they'd immediately stop their own rotations as they stuck together.

So, if you're just looking for something plausible and interesting looking (ala game physics), I'd say that you could normalize the coefficient of friction to account for the tiny contact area between the two bodies (pick something that looks interesting) and use the sin of the angle between the path of the bodies and the impact point. Straight on, you'd get a bounce, 45 degrees would give you bounce and spin, 90 degrees offset would give you maximal spin and least bounce.

Obviously, none of the above is an accurate simulation. It should be a simple enough framework to cause interesting behaviors to happen, though.

EDIT: Okay, I came up with another interesting example that is perhaps more telling.

Imagine a single disk (as above) moving towards a motionless, rigid, near one-dimensional pin tip that provides the previous high friction but low stickiness. If the disk passes at a distance that it just kisses the edge, you can imagine that a fraction of its linear energy will be converted to rotational energy.

However, one thing you know for certain is that there is a maximum rotational energy after this touch: the disk cannot end up spinning at such a speed that it's outer edge is moving at a speed higher than the original linear speed. So, if the disk was moving at one meter per second, it can't end up in a situation where its outer edge is moving at more than one meter per second.

So, now that we have a long essay, there are a few straightforward concepts that should aid intuition:

  1. The sine of the angle of the impact will affect the resulting rotation.
  2. The linear energy will determine the maximum possible rotational energy.
  3. A single parameter can simulate the relevant coefficients of friction to the point of being interesting to look at in simulation.
Bob Cross
Interesting suggestion, and a very good one; you're right, I do tend to assume that the edges have a maximal coefficient of friction; the problem is that even with the "barely edge contact" situation you refer to above, not all the energy gets transferred to angular momentum; in fact, i doubt that it would be at all more than 50%. To some extent, I'm just hoping to find something that will explain the mechanics of this in a way that a software guy can comprehend. As is, I still tend to think that a rigid body simulation might be the best way to go, but I still want to avoid it...
McWafflestix
@McWafflestix, right, I was imagining a bizarre disk that had very high coefficient of friction but no stickiness at all. An absurd item but it does make the point: if you had two disks wrapped in sandpaper that barely kissed as they went past, they would end up spinning very rapidly and moving much more slowly. That's what I mean with "normalizing" above: you can roll all the coefficients up into a single parameter that you could fiddle with until the behavior is interesting to you.
Bob Cross
@bobcross: it's an interesting point, and one which is certainly useful for understanding the problem; assuming an infinitely high edge friction coefficient (but no stickiness), two disks which just barely touch while moving past each other would clearly have their velocities averaged and halved, with the remainder of the momentum energy (1/2 the total) going into angular momentum (split between the two). Generally, I'm more interested in accurate simulation than "good enough"; mostly that's because accurate simulation is surprisingly simple, actually, once you understand what's going on.
McWafflestix
+4  A: 

If you're interested in rotating non-spherical bodies then http://www.myphysicslab.com/collision.html shows how to do it. The asymmetry of the bodies means that the normal contact force during the collision can create a torque about their respective CGs, and thus cause the bodies to start spinning.

In the case of a billiard ball or air hockey puck, things are a bit more subtle. Since the body is spherical/circular, the normal force is always right through the CG, so there's no torque. However, the normal force is not the only force. There's also a friction force that is tangential to the contact normal which will create a torque about the CG. The magnitude of the friction force is proportional to the normal force and the coefficient of friction, and opposite the direction of relative motion. Its direction is opposing the relative motion of the objects at their contact point.

Theran
Ah, that looks very useful; in particular, your comments about the tangential friction force is very good and very useful.
McWafflestix