# Zero G forces: Translate or Rotate?

I am working on some 3D physics simulations for computer software (just for fun), and have some general physics questions.

Basically, it goes like this: there are 'models', which have 'center of mass' values, 'mass' values, and are made from basic shapes (ellipsoids and boxes). They are run through an 'update', in which models can apply forces to themselves (or, rather, the user applies force to the models: poking, throwing, etc), and then they are run through the 'physics engine', in which Forces such as gravity and drag are applied, where collisions are calculated, and where collision forces are applied. It's made to be pretty versatile. It simply represents a force as a vector, and because constant forces like gravity are applied by the physics engine every update, the models are caused to accelerate.

So essentially all that a model has to do is remember its rotational force vector and its translational force vector, then modify those every time a new force hits and apply them at the end of each update.

So the question is, let's say you have an object in space, and it gets hit (off center) by a force. How do you calculate the resulting translational and rotational forces?

For example, if you have a large plank in zero G, and it's hit by a projectile on one end, what happens. Does the board spin around its CG, or does it start moving? Or both, but if so, how much of each? And what if the board is heavily weighted on one end?

Thanks for the help.

Related Other Physics Topics News on Phys.org
Well, if you hit something off center you apply a torque. Torque is a change in angular momentum. But depending on the angle you apply the force, you may or may not move the center of mass. If you apply a force completely perpendicular to the levar arm, or axis coming straight out from the center, then you will only rotate the object. To tell how fast it will spin, you have to know the moment of inertia: mr^2. mass x radius(squared) which can be summed up and averaged out pretty easily along the lever arms if the object is uniform density and a simple shape. So it depends on the angle, distance from the center of gravity, at which you strike an object as well as mass density and shape of the object, to tell what it will do.
If you hit an object flat and the impulse is straight toward the center of gravity, then the object won't spin; it will just move like in a 1 dimensional head on collision.

If you want to calculate the angular velocity after the collision. You have to know the angle, to find the torque, then take the torque and divide it by the total moment of inertia of the radius of the object. To find the translational, just take the component of the impulse that was directly toward the center of gravity and treat as a regulaar collision.

Last edited:
Thanks a lot! So what about a convoluted surface, say, a sphere? Or a different convoluted shape? How does the force get distributed in that situation?

It seems (correct me if I am wrong) that a force applied to an object is broken into two components: the component pointing towards the center of mass, and the component perpendicular to the first component. The former goes into translational force, and the latter goes into rotational force. Is that correct?

Also, is there any way to get these components without using sin and cos? Those are rather CPU-intensive functions. For my purposes I don't really need excessive real-time speed (although it couldn't hurt), but do the top-of-the-line video games today really use sin and cos every time a force is applied? Is there a way to fake it, or do they use different methods of calculating physics? Just curious, not sure if anyone knows the answer.

Thanks a bunch.

If you can calculate the force, then the linear force will produce the same linear reaction regardless of the point of application of the linear force. If the linear force vector is not in the direction of the center of mass of the object, than a torque is also created.

What isn't clear hear is that the further the force vector deviates from crossing through the center of mass of a free object in space, the more work that is done, and the same force will be applied over a longer distance. If it's a free non-rotating body in space (before the force is applied), a greater rate of acceleration at the point of application is required in order to generate the same amount of force, resulting in more distance at the same force to generate the extra work required to increase the angular energy.

_Nate_ Yes, that is correct that there is basically two components. But, I am not sure how they make physics engines as good as they are. I have actually wondered that myself, when I first played half life 2. I am pretty sure, it's no where near as complicated as what happens in real life. Maybe they give an object a certain mass, but don't calculate the moment of inertia at every single point on the object. For example, the moment of inertia changes every 2 inches, instead of continuously along the radius, and same goes for angles at which it is hit. Or perhaps CPUs are capable of those functions, I don't know.

For convoluted surfaces, it's the same stuff. Find the center of gravity, find the moment of inertia about the center, which will be much harder to do because the mass is not in a easily describable shape like a sphere. You would need to integrate the change in moment of intertia with respect to the distance along the axis.

Also, is there any way to get these components without using sin and cos? Those are rather CPU-intensive functions. For my purposes I don't really need excessive real-time speed (although it couldn't hurt), but do the top-of-the-line video games today really use sin and cos every time a force is applied? Is there a way to fake it, or do they use different methods of calculating physics? Just curious, not sure if anyone knows the answer.
Hey Nate, If you need to scrimp on CPU cycles for Cos and Sin the normall method is to create an array for Cos and an array for Sin values that is as large as you need for good resolution. Then you can do a straight lookup instead of a calculation each update. If you need it even finer then you need to increase the table size, or do a proportional averaging of two consecutive values in the table (essentialy turning your circle into an N sided polygon where N is the number of entries in your table)

Last edited: