• ### What is your GameDev Story?

#### Archived

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

This topic is 5368 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]

• ### What is your GameDev Story?

In 2019 we are celebrating 20 years of GameDev.net! Share your GameDev Story with us.

• 17
• 14
• 10
• 9
• 11
• ### Forum Statistics

• Total Topics
634094
• Total Posts
3015498
×