#### Archived

This topic is now archived and is closed to further replies.

This topic is 5038 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Assume you have some mass m with an inertial tensor I . This mass may or may not be symmetrical about any of the axes, so let's keep it general. You apply a torque t to the mass. Torque is defined by the equation: t = r × F where
• r is the position vector from the pivot point to the line of action of F
• F is the applied force vector
• × is the vector cross product operator
The resulting vector t is going to be normal to r and F . The applied torque is going to induce an angular acceleration a on the mass such that t / a = I . Right? Or does a need to be a vector? Is it possible, assuming the mass is not symmetrical, to store the torque on the object as just one vector value (r ×F ), or will I need to store both r and F ? If the force is applied to the mass such that it goes through the center of mass, then there will be no angular acceleration, just linear acceleration. Is it possible to generalize this torque concept to cause linear acceleration as well as rotational (or maybe generalize the force concept to cause rotational acceleration as well as linear)? For example, consider the following two situations: Situation one: In the above situation, the force goes through the center of mass, so there will be no rotational acceleration. The mass will be accelerated linearly, though. But if the force is off-set from center by a small amount, a rotational acceleration will be induced, as well as a linear acceleration. How can I generalize this in my engine's physics sub-system such that I don't need to keep track of forces and torques as separate things? Is there a way to determine how much of the force will induce rotation and how much will induce linear acceleration depending on ... what? The center of mass, I assume, and the orientation and location of the force? Situation two: This the above situation, there are two forces acting on the mass (an airplane in this case, if you couldn't tell by my bad drawings ). Now, using the formula for torque (t = r × F ), one of the torques will be positive and one will be negative. Assuming the forces and the distances are otherwise equal, the torques will be equal in magnitude and opposite in direction. Therefore, add them together and the net external torque is zero; there is not rotational acceleration. However, there is some linear acceleration, obviously, or else the plane wouldn't be able to fly. In this case, the linear acceleration can be calculated by adding the two forces and dividing that net force by the mass of the airplane. Just a random thought: the velocity of a point on a mass, say one of the engines on the airplane, is not just based on the linear velocity of the aircraft's center of mass, but also on the rotational velocity of the aircraft. Therefore, the instantaneous velocity of the point will be the sum of the linear velocity and the rotational velocity times the distance from the center of mass (v = v_cm + r w , where v is the velocity of the particle, v_cm is the linear velocity of the mass, r is the distance from the point to the center of mass, and w is the rotational velocity). Does this describe the relationship between forces and torques acting on a mass? As you can tell, I'm somewhat confused by this situation. Sorry for rambling. Thank you for your help. [edited by - SpiffGQ on May 7, 2004 2:44:54 PM]

##### Share on other sites
I'm not 100% sure what your question is, but I think you may have answered it yourself in there someplace.
What I've done is just pass the location and direction of the force to the object it is acting on.
It will accelerate the object in a linear direction no matter where it is positioned.
So AccelLinear = Force / Mass;
Then have it find the distance from the center of mass. That is your "r".
If "r" turns out to be zero, (your force is acting right on the center off the object) then the vectors work out so there will be no torque.
There is no need to really seperate the concepts. Add up all your force vectors, that will accelerate it linearly. Add up all the torques and that will spin the crazy thing.

i did something like:
void ApplyForce (vector force, vector location)
force += force;
r = location - centerMass;
torque += r*force;

In this way you can just keep adding all the forces you want, and they add up fine.

[edited by - CombatWombat on May 6, 2004 11:17:05 PM]

[edited by - CombatWombat on May 6, 2004 11:17:46 PM]

##### Share on other sites
quote:
Original post by CombatWombat
i did something like:
void ApplyForce (vector force, vector location)
force += force;
r = location - centerMass;
torque += r*force;

In this way you can just keep adding all the forces you want, and they add up fine.

That''s usually how it''s done.

##### Share on other sites
I am confused about something regarding what combat said:

quote:

It will accelerate the object in a linear direction no matter where it is positioned.
...
There is no need to really seperate the concepts. Add up all your force vectors, that will accelerate it linearly. Add up all the torques and that will spin the crazy thing.

Isn''t there a need to decompose every force into components such that one of the components acts in the direction of the center of mass, and only that component produces the linear acceleration?

##### Share on other sites
The direction of the center of mass? What is that supposed to mean?

##### Share on other sites
NO!!

If a force acts on an object it creates independently linear and angular acceleration. Don''t decompose!

F: force
m: mass
r: cnter of mass to pivot point vector
I: inertia tensor

F = m*a, M = r x F = I*A

a = acceleration = F/m
A = angular acceleration = I^(-1)*(r x F)

##### Share on other sites
quote:
Original post by CombatWombat
I'm not 100% sure what your question is, but I think you may have answered it yourself in there someplace.
What I've done is just pass the location and direction of the force to the object it is acting on.
It will accelerate the object in a linear direction no matter where it is positioned.
So AccelLinear = Force / Mass;
Then have it find the distance from the center of mass. That is your "r".
If "r" turns out to be zero, (your force is acting right on the center off the object) then the vectors work out so there will be no torque.

I'm not certain I understand. In the following situation:

There will be no torque since the force is acting through the center of mass. However, the distance r is not zero since the force is applied at the edge of the object (say an engine or a contact impulse or something).

However. The cross product of two parallel vectors (like the position vector and the force vector above) is zero, so I guess that could be checked to see if a torque is induce.

quote:

There is no need to really seperate the concepts. Add up all your force vectors, that will accelerate it linearly. Add up all the torques and that will spin the crazy thing.

i did something like:
void ApplyForce (vector force, vector location)
force += force;
r = location - centerMass;
torque += r*force;

In this way you can just keep adding all the forces you want, and they add up fine.

Thank you for the information. That is what I wanted to know.

Consider the following situation:

In the above situation, it is obvious that the force will angularly accelerate the mass (assuming, of course, the center of mass is located nearer the squarish part).

However. There will also be some linear acceleration, too. However, the linear acceleration won't be as strong as if a force of the same magnitude was acting through the center of mass. Right? Therefore, if one was to just add this force to the net external force, wouldn't one be overestimating this force's ability to linearly accelerate the mass? It seems like the linear acceleration would be very small since most of the force's "energy" is going into rotating the mass.

Where am I going wrong? Thanks for your help.

[edited by - SpiffGQ on May 7, 2004 2:44:37 PM]

##### Share on other sites
The linear acceleration will be the same as before, provided the masses are the same.

##### Share on other sites
quote:
Original post by spiffgq
However, the linear acceleration won''t be as strong as if a force of the same magnitude was acting through the center of mass.

Yes, it will. Many people find this counter intuitive, but that''s the way it is.

##### Share on other sites
That's one of the things that I have been most confused about. I supposed I can trust you though because you seem to know what you are talking about (my last post here asked about that).

quote:

There will be no torque since the force is acting through the center of mass. However, the distance r is not zero since the force is applied at the edge of the object (say an engine or a contact impulse or something).

I don't know if this has been answered, but this is something I understand. The distance you are takling about is really the 'perpendicular' distance from the center of pass onto the direction of the force.

Mathematically you could do it like this(although Im not sure if this is really a good implementation):

Normalize the direction in the force.
The projection of the center of mass onto the force is just:
PerpPoint = ForceDirection * DotProduct(ForceDirection,centerofmass)

Then the actual distance is:
PerpDistance = sqrt((PerpPoint - CenterOfMass)^2)
EDIT:
and the reason that there is no torque produced in your picture is because the center of mass *IS* the projection of the center of mass onto the force direction, meaning the perpendicular distance must be zero.

[edited by - shadow12345 on May 7, 2004 8:50:49 PM]

##### Share on other sites
quote:
Original post by spiffgq
How can I generalize this in my engine''s physics sub-system such that I don''t need to keep track of forces and torques as separate things?

With a vector and a quaternion. A vector gives you direction and magnitude for the linear acceleration, and a quaternion gives you a moment of rotation and magnitude.

Note that when physics is involved the magnitude is important (where as the magnitude is normalized for geometric placement).

...
quote:
Original post by Anonymous Poster
quote:
Original post by spiffgq
However, the linear acceleration won''t be as strong as if a force of the same magnitude was acting through the center of mass.

Yes, it will. Many people find this counter intuitive, but that''s the way it is.

I think you''re talking about two different things - you''re both right.

##### Share on other sites
Hmmm? I''m pretty sure that if you apply the same force on the same object twice, but one on CM and the other one somewhere else, the resulting linear acceleration will be different...
I mean, put a pen on your desk and hit it with another pen, once its center, other time its end. You will see the difference. I also think that if you hit your pen on the very end of it, you could possibly make it spin without chaning it''s position...

The other thing is conservation of energy: if we apply the same force but it now not only moves the same way but also spins - where does it take the extra energy to spin from? It has to give up some of it''s energy produced by the force on spinning, therefore making its linear motion slower...

unless I''m a retard...

##### Share on other sites
quote:
Original post by szinkopa
The linear acceleration will be the same as before, provided the masses are the same.

quote:
Original post by Anonymous Poster
quote:
Original post by spiffgq
However, the linear acceleration won''t be as strong as if a force of the same magnitude was acting through the center of mass.

Yes, it will. Many people find this counter intuitive, but that''s the way it is.

Okay. Thanks for the clarification. I was not aware ...

quote:
That''s one of the things that I have been most confused about. I supposed I can trust you though because you seem to know what you are talking about (my last post here asked about that).

quote:

There will be no torque since the force is acting through the center of mass. However, the distance r is not zero since the force is applied at the edge of the object (say an engine or a contact impulse or something).

I don''t know if this has been answered, but this is something I understand. The distance you are takling about is really the ''perpendicular'' distance from the center of pass onto the direction of the force.

Mathematically you could do it like this(although Im not sure if this is really a good implementation):

Normalize the direction in the force.
The projection of the center of mass onto the force is just:
PerpPoint = ForceDirection * DotProduct(ForceDirection,centerofmass)

Then the actual distance is:
PerpDistance = sqrt((PerpPoint - CenterOfMass)^2)
EDIT:
and the reason that there is no torque produced in your picture is because the center of mass *IS* the projection of the center of mass onto the force direction, meaning the perpendicular distance must be zero.

I understand. Lemme digest this for a bit.

Hmm.

Okay. I guess what you''re saying is the difference between the following two situations:

In the above image, the vector R is pointing to the "line of force".

In the above image, the vector R is pointing to the point of application of the force F.

The cross product in both images will be in the same direction but will differ in magnitude.

I assume the first image is the correct situation. And as that force moves inward toward the center of mass, assuming the line of force remains parallel to its current orientation, the R vector will go to zero.

I guess my question boils down to this: what is the best way to store forces and torques for a (non-point) mass? Since all forces acting on an object will linearly accelerate the mass and since all forces can (depending on the line of force) rotationally accelerate the mass, it seems like one can store them together somehow.

Let me think about this. One can probably just add the forces together to get the net external force. Torques work the same way. However, a force applied through the center of mass won''t create a torque, so the torque will be zero. Therefore, one must store the force vectors. And the force vector in and of itself is not enough to describe the torque. One also needs the distance from the center of mass.

So would the best way to store forces and torques be as an array of individual forces and their points of application? Kind of something like:

struct Torque{	Vector3d force;	Vector3d position;};

Then, during physics updates, one can iterate over the array, add up the forces, and get the total net external force for linear acceleration. Then one can iterate over the array, calculate the torque via a cross product, and add them up to get the net external torque for rotational acceleration. (Actually, it seems that the Torque:osition attribute will have to be "correct" to point to the line of force instead of the point of application.)

What do you think? That y''all for your help. This discussion has been most illuminating for me.

##### Share on other sites
quote:
Original post by Magmai Kai Holmlor
I think you''re talking about two different things - you''re both right.

What two things?

quote:
Original post by Koobazaur
Hmmm? I''m pretty sure that if you apply the same force on the same object twice, but one on CM and the other one somewhere else, the resulting linear acceleration will be different...
I mean, put a pen on your desk and hit it with another pen, once its center, other time its end. You will see the difference. I also think that if you hit your pen on the very end of it, you could possibly make it spin without chaning it''s position...

The other thing is conservation of energy: if we apply the same force but it now not only moves the same way but also spins - where does it take the extra energy to spin from? It has to give up some of it''s energy produced by the force on spinning, therefore making its linear motion slower...

unless I''m a retard...

Maybe it has something to do with the difference between the linear acceleration of the mass as a whole and the linear acceleration of a point on the mass near the point of application. Because the instantaneous velocity (and I assume acceleration) of a point on a mass is the sum of both the mass''s linear velocity and the mass''s rotational velocity times the point''s distance from the center of mass. Therefore, if the mass is spinning and moving, a point some distance away from the center will have a greater instantaneous velocity than the mass as a whole.

##### Share on other sites
quote:
Original post by Magmai Kai Holmlor
With a vector and a quaternion. A vector gives you direction and magnitude for the linear acceleration, and a quaternion gives you a moment of rotation and magnitude.

I don't understand what a "moment of rotation" is? Is that another name for torque? Or moment of inertia? Thanks for your help.

EDIT: Nevermind. I looked it up (gasp!) and it seems to be the same thing as moment of inertia. But I thought one should store MOI as a tensor (a 3x3 matrix) rather than a quaternion. Where am I going wrong? Thanks.

[edited by - SpiffGQ on May 7, 2004 11:46:32 PM]

##### Share on other sites
quote:
Original post by Koobazaur
Hmmm? I''m pretty sure that if you apply the same force on the same object twice, but one on CM and the other one somewhere else, the resulting linear acceleration will be different...
I mean, put a pen on your desk and hit it with another pen, once its center, other time its end. You will see the difference. I also think that if you hit your pen on the very end of it, you could possibly make it spin without chaning it''s position...

That''s why I say many find this counter intuitive. The pen probably doesn''t help you either, since it is very small and light, so it is hard to apply a constant force to it using your bare hands. Try using a bigger object, and make sure the friction is as small as possible. (An object floating on an air-hockey table would be ideal for the experiment.)

quote:
The other thing is conservation of energy: if we apply the same force but it now not only moves the same way but also spins - where does it take the extra energy to spin from? It has to give up some of it''s energy produced by the force on spinning, therefore making its linear motion slower...

The "extra energy" is coming from the fact that the force is acting on the object for a longer distance. Work is force times distance, you know?

##### Share on other sites
quote:
Original post by Anonymous Poster
That''s why I say many find this counter intuitive. The pen probably doesn''t help you either, since it is very small and light, so it is hard to apply a constant force to it using your bare hands. Try using a bigger object, and make sure the friction is as small as possible. (An object floating on an air-hockey table would be ideal for the experiment.)

[snip]

The "extra energy" is coming from the fact that the force is acting on the object for a longer distance. Work is force times distance, you know?

I think I understand now. It''s all in conservation of linear momentum and conservation of kinetic energy. Thanks for your help.