1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Angular Momentum of Rigid Bodies

  1. Jul 15, 2012 #1
    I'm trying to calculate the rotation of a rigid body due to a force applied to a single point on the body. This application is for 3D game programming. I understand how to find the axis of rotation by calculating the cross product of the point of intersection & the vector between the center of the rigid body and the point of intersection(vecPtoC). My question is this:

    If the rigid body has a certain mass, how do I determine how much force to apply in order to cause the body to rotate? If the force applied to the body is too small, the body should not rotate. Also, if the force applied to the body is great enough to rotate the body, how much does the body rotate due to the force?
  2. jcsd
  3. Jul 15, 2012 #2


    User Avatar
    2017 Award

    Staff: Mentor

    In this case, you have some sort of friction. The maximal friction torque depends on the type of friction and the geometry.

    The change in angular momentum with respect to time is equal to the sum of all torques. I do not know how your system works, so it is hard to give more specific answers.

    If the body is not fixed somewhere, it might get a linear velocity as well. In addition, it might change its axis of rotation, if it is asymmetric enough.
  4. Jul 15, 2012 #3
    thanks mfb...the body is at rest and a torque(0,-1,0) is calculated from the cross product of the force applied(0,0,1) & the vector difference between point of impact(1,0,-1) and center of body(0,0,0). I've applied the torque to the body's orientation quaternion like so:

    quatOrientation.w += 0.5f * (quatOrientation.x * torque.x +

    quatOrientation.y * torque.y +

    quatOrientation.z * torque.z);

    quatOrientation.x -= 0.5f * (quatOrientation.w * torque.x -

    quatOrientation.z * torque.y +

    quatOrientation.y * torque.z);

    quatOrientation.y -= 0.5f * (quatOrientation.z * torque.x +

    quatOrientation.w * torque.y -

    quatOrientation.x * torque.z);

    quatOrientation.z -= 0.5f * (quatOrientation.x * torque.y -

    quatOrientation.y * torque.x +

    quatOrientation.w * torque.z);

    This method is from a game programming book by Jim Adams. How though do I factor in the moment of inertia? I haven't considered the friction btween the body and the ground...I'm more interested in taking into account the amount of force and the mass of the body...any ideas?
  5. Jul 15, 2012 #4


    User Avatar
    Science Advisor
    Homework Helper
    Gold Member

    Not sure what you mean by that calculation, but it sounds like it is only going to give you the axis of rotation as a vector. It won't tell you where the instantaneous centre of rotation is.
    You say there's no friction. In that case, even the tiniest force will result in movement.
    Suppose a force F acts on a body with mass centre at O. The body has mass M, and the line of action of F misses O by distance d. The centre of mass will accelerate in the direction of F at rate F/M.
    The moment applied to the body has magnitude Fd. Rotation is complicated in 3D for arbitrary rigid bodies. You have to consider the principal axes of inertia. See e.g. http://en.wikipedia.org/wiki/Euler's_equations_(rigid_body_dynamics)
  6. Jul 16, 2012 #5
    my mistake...there must be friction. My application is for a video game. If two objects collide, I would like to calculate the angular momentum of those objects due to the force applied to a point on each rigid body. My understanding is that the moment of inertia of a rigid body determines the amount of force necessary to cause a change in angular momentum. I would like to account for these forces in my calculations of angular momentum. How would I do so?I'm not necessarily concerned with the center of mass...for my application the center of mass can be the center of the body. The body will rotate from this center. I have calculated the inertia scalars as:
    xs = length.x * length.x
    ys = length.y * length.y
    zs = length.z * length.z.

    And the inertia tensors as:
    Ixx = mass * (ys + zs)
    Iyy = mass * (xs + zs)
    Izz = mass * (xs + ys);

    Assuming the center of the body is at (0,0,0) and the body has length.x = length.y = length.z = 2, if a force of (0,0,1) is applied at the point (1,0,-1), the upper right corner of the cube's front face, how much would you expect the cube to rotate(if at all)? What amount of force would be necessary to rotate the cube?
    Last edited: Jul 16, 2012
  7. Jul 16, 2012 #6


    User Avatar
    Science Advisor
    Homework Helper
    Gold Member

    This sounds like impacts, so the forces are indeterminate. You need to use conservation of momentum and of angular momentum. That won't be enough to fix the motion; you'll also need to make some assumption about coefficient of restitution. Or just say such-and-such a percentage of energy is lost.
    That's summing over the xs etc?
    (1, 0, -1) is not a corner of the cube - it's halfway along an edge.
    Angular Impulse = Momentum of impulse x distance (vector product)
    = Moment of inertia x change in angular velocity
    Suppose a body of mass m strikes the middle of the top edge of the front face at speed v in a front-to-back direction. Assume the impact is completely inelastic (i.e., the bodies coalesce). The angular impulse about the x-axis (left-right axis) is mva, where a is the half-width of the cube. Let the moment of inertia of the cube about the x-axis be MI. If the angular speed of the merged body after impact is w then mva = mwa2+MIw.
    No doubt you're more interested in cases where the bodies bounce with relatively little loss of energy.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook