# Basic Help - Incoming Force, Rotation and Translation

Hello, this is my first post in this forum, I hope I've put it in the proper category.

I'm currently programming a 3D sci-fi game and would like to simulate a little bit of physics during collisions. Nothing too complicated but I would like to be able to split an incoming force into its rotational and translational components. My first attempt was to calculate the angle between the force and lever arm vectors (if "lever arm" is the correct term, I'm defining it as the vector formed by the point of action and center of mass), and defining Fr = F sin (theta) for rotation and Ft = F cos (theta) for translation, thinking that the parallel component of a force is what causes translation, and the perpendicular component what causes rotation.

But upon demo-ing it I've noticed that the rotation doesn't seem to be working correctly; sometimes its too little, sometimes too much. Looking at the formulas I've noticed that an incoming force that is perpendicular to the lever arm will cause pure rotation and no translation, which I'm pretty sure is wrong.

I'm not very good at physics (can you tell?) and I don't know much math beyond trig. Can anybody explain to me how an incoming force is correctly split into rotational and translational components?

Thanks!

Claude Bile
Do you have the sin and cos mixed up maybe in your programming?

The physics looks ok.

EDIT:
Ruddiger said:
Looking at the formulas I've noticed that an incoming force that is perpendicular to the lever arm will cause pure rotation and no translation, which I'm pretty sure is wrong.

This is correct. For theta = 90 degrees, the motion caused will be purely rotational, this is easily checked by substituting this value of theta into the equations you quoted.

One more thing you could check is ensuring that you use radians and not degrees for your units of theta.

Claude.

Last edited:
This is correct.
No it isn't. Any time you tap a free object, you should obtain some linear motion in order to conserve total linear momentum. (Only once that works need you worry also about conserving angular momentum.) You'd need forces acting in multiple places (chosen to sum to a pure torque) to produce pure rotation.

Claude Bile
Not necessarily. If the applied force is purely tangential, you will cause no translation - all the translational momentum will remain with the projectile. The projectile will impart angular momentum onto the target, however the projectile itself will also obtain some angular momentum - equal and opposite angular momentum in fact as conservation of momentum demands.

This case is of course an idealised one due to the impossibility of acheiving a purely tangential force in practice.

Claude.

Doc Al
Mentor
Not necessarily. If the applied force is purely tangential, you will cause no translation - all the translational momentum will remain with the projectile.
I don't think so. If an unbalanced force acts on an object--whether tangential or not--the object's center of mass will be accelerated per Newton's 2nd law. It's true that only the tangential component contributes to torque about the center of mass, but the entire force acts on the center of mass in producing translational acceleration. (I agree with cesiumfrog.)

This is part of my dilemma. I have a somewhat 'car-shaped' ship in my demo, and if a force hits the 'roof' right above the center of mass it might only rotate if that incoming force forms a right angle with the lever arm - and it just seems wrong. I can never get an object to purely rotate (or anything even close) in the real world by just applying one force. Only if I apply more than one and spin it like a top will the center of mass stay somewhat fixed. So it seems that I'm overlooking something in my method that should always allow for an object to translate regardless of the angle.

But I've since come up with a new method, let me know what you think: I surround the objects with a bounding sphere centered at the center of mass, with a radius (r) representing the largest distance between the center and any vertex. Then, instead of calculating an angle, I calculate the perpendicular distance between the force ray and the center of mass (call this d). I introduce a new variable (called edgeFactor) which is a value between 0 and 1 which represents the percentage of the force that will go into translation when d = r. For other values of d I linearly interpolate said percentage assuming that when d = 0 the edgeFactor will be 1 and the entire force will work into translation. The rest will rotate the object as expected.

I don't know if that made sense or not. But my thinking was that the variable edgeFactor would also represent the distribution of mass, something along the lines of what percentage of the total mass is present along the edge. So I could simply change that variable to approximate the shape of the object and influence how much it will rotate.

Doc Al
Mentor
This is part of my dilemma. I have a somewhat 'car-shaped' ship in my demo, and if a force hits the 'roof' right above the center of mass it might only rotate if that incoming force forms a right angle with the lever arm - and it just seems wrong. I can never get an object to purely rotate (or anything even close) in the real world by just applying one force. Only if I apply more than one and spin it like a top will the center of mass stay somewhat fixed. So it seems that I'm overlooking something in my method that should always allow for an object to translate regardless of the angle.
As discussed above, a given force (or impulse, which is force acting over a given time to produce a change in momentum) will accelerate the center of mass regardless of the angle it makes.

But I've since come up with a new method, let me know what you think: I surround the objects with a bounding sphere centered at the center of mass, with a radius (r) representing the largest distance between the center and any vertex. Then, instead of calculating an angle, I calculate the perpendicular distance between the force ray and the center of mass (call this d). I introduce a new variable (called edgeFactor) which is a value between 0 and 1 which represents the percentage of the force that will go into translation when d = r. For other values of d I linearly interpolate said percentage assuming that when d = 0 the edgeFactor will be 1 and the entire force will work into translation. The rest will rotate the object as expected.
Again it seems that you don't realize that the entire force contributes to the acceleration of the center of mass according to a = F/m. Yes, it's that simple.

I think part of the problem is that you are thinking in terms of forces imparted to objects, where I suspect you should be thinking in terms of collisions between objects. I don't know the details of your game, or what your "incoming force" represents, but two objects colliding will exert different impulses on each other depending on exactly how they collide.

If you haven't already, do a search on "game physics". You'll find tons of info, much quite technical. Some of it might help you with your game, depending on how crazy you want to get.

To get you started, check out the physics articles by game developer Chris Hecker on http://www.d6.com/users/checker/dynamics.htm" [Broken]. (I haven't read them in detail, but what I did read looked OK to me.)

Last edited by a moderator:
Claude Bile
This is correct. For theta = 90 degrees, the motion caused will be purely rotational, this is easily checked by substituting this value of theta into the equations you quoted.
At theta = 90 degrees, no force at all will be imparted.
Claude Bile said:
The projectile will impart angular momentum onto the target, however the projectile itself will also obtain some angular momentum - equal and opposite angular momentum in fact as conservation of momentum demands.
This violates conservation of energy.

Claude.

I think part of the problem is that you are thinking in terms of forces imparted to objects, where I suspect you should be thinking in terms of collisions between objects. I don't know the details of your game, or what your "incoming force" represents ...

Well, I was kind of hoping that I could reduce all scenarios down to forces being imparted to objects, such as an engine acting on a ship, a projectile hitting a ship, or two ships colliding. Is this not possible?

Again it seems that you don't realize that the entire force contributes to the acceleration of the center of mass according to a = F/m. Yes, it's that simple.

I admit this confuses me! Does the center of mass have any acceleration when the object is rotating? Is it staying fixed in position but changing direction and therefore have acceleration - or do you mean to say that it translates the same regardless of where the force acts on the object?

I don't want to get too crazy with the physics, I just want to approximate what the player would expect to happen. Still, I'll read up on the subject with the link you've suggested and see if I can obtain any understanding from it.

Thank you for the help thus far.

So glad to find you, guyz!

First, I'd like to thank you for solving my problem (apparently). I don't intend to hijack the thread.
I'm making this 2d game (with GameMaker 6) with a tank and a truck colliding and desperately needed a way to decompose a force into rotation and translation and thrown these words in search on the web. Now I'm bumpin' into this forum at this thread: exactly what I was after! Thanx again.

On the other hand, I only know physics from what I observe in real life and logic; so don't flame me if I say nonsense in unapropriate terms. These are my observations:

Never could the acting force of the "effector" completely be turned into rotation for the object upon it acts - "effected", not even in pure tangential approach; this is because of this:
consider 2 vectors: v1=tank.direction_of_movement (from mass center forward); v2=force with which the tank acts upon the truck; as they don't have the same direction, v2<v1; by how much?
well, if v2 _|_ v1 (pure tangential) v2=0 (even theoretically!)

I may have descovered "the cup with the handle on the left" so don't yell :)

EDIT:
I thought v2 was the acting component of v1 upon the truck; where was I thinking?!

#### Attachments

• collision.bmp
85 KB · Views: 386
Last edited:
Doc Al
Mentor
Well, I was kind of hoping that I could reduce all scenarios down to forces being imparted to objects, such as an engine acting on a ship, a projectile hitting a ship, or two ships colliding. Is this not possible?
I suppose you could, but that might be the hard way since the force between two objects would depend on how they collide.
I admit this confuses me! Does the center of mass have any acceleration when the object is rotating? Is it staying fixed in position but changing direction and therefore have acceleration - or do you mean to say that it translates the same regardless of where the force acts on the object?
If there's a net force on an object, its center of mass will accelerate. In addition, depending on where the force is applied, the object may rotate. The same force applied to the same mass will produce the same acceleration of the center of mass regardless of where it acts.