At first, it may seem a bit academic to transform these quantities into different
frames-of-reference but, this is important for solving practical problems like
collisions. For instance, the two objects colliding will have their inertial
tensors defined in their own local coordinates, but when we work out the collision
response, the impulse will have to be calculated in some common coordinate system.

What we are doing here is observing the same particle or solid object from
different frames-of-reference. When the frames-of-reference are static (not
moving relative to each other). Then the Newtonian laws will apply, regardless
of where, or which direction, that we are looking at them from, provided that
we are consistent about measuring all quantities on the same frame-of-reference.
It may be that the transform is changing with time, for example, if we are
trying to solve a collision response, we might want to work in the frame-of-reference
of one of the objects that is colliding. This object may be moving, so its frame-of-reference
is moving with respect to the absolute coordinate system.
Do all the laws of physics apply when observing them from a moving frame-of-reference?
If the frame-of-reference is moving with a constant linear velocity, then the
Newtonian laws will apply just the same. A stationery object in one frame-of-reference
may appear to be moving in another, but provided that we are constant about
which frame-of-reference that we are working in, neither will contravene the
laws. (Einsteins laws may not apply, the speed of light is the same in each
frame-of-reference, relativity is not relative to the frame-of-reference - we
are interested in slow speed interactions so this is not an issue for us).
However, if the frame-of-reference has angular motion (even if its constant),
or if the frame-of-reference is accelerating, or if it has some irregular motion,
then the Newtonian laws will not apply in this frame-of-reference.
To take an example, imagine a solid object travailing in free space, it may
be spinning and have linear velocity as well. We may want to work in this objects
own coordinate system, because this frame-of-reference is rotating, the Newtonian
laws may not apply, for example an object which is stationary in the absolute
frame-of-reference will appear to be traveling in a spiral in this objects frame
of reference. An object with no forces acting on it should not be moving in
a spiral, so Newtonian laws do not apply in this frame-of-reference. However,
if we want to apply this inertia tensor, then we have to work in the local coordinate
system of the rotating object.
|
|
= |
| ixx |
ixy |
ixz |
| iyx |
iyy |
iyz |
| izx |
izy |
izz |
|
|
So, we have to be careful. When we are calculating torques and forces, we often
want to work in its local coordinate system, but when we are calculating motion
we probably want to work in absolute coordinates.
Using matrix algebra to calculate transforms to other frames-of-reference
As described here, a
4x4 matrix can be used to represent a rotation and a translation in 3 dimensions.
So we can use matrix algebra to translate from one frame of reference to another.
The transform will take a 3d vector representing a point in absolute coordinates
and convert it into a 3d vector representing a point in absolute coordinates:
a
= [T]
l
It is possible to have many layers of one frames-of-reference inside another.
For example, if we know the position of the moon relative to the earth [Tme]
and we know the position of the earth in the frame-of-reference of the sun [Tes],
then we could work out the position of a point on the moon in the frame of reference
of the sun [Tms].
It turns out that transforms can be concatenated by multiplying
their corresponding matrices. So [Tms] = [Tes]*[Tme].
One way to represent this is to use a scene graph. We could use a scene graph
is a similar way to VRML. We could put dynamics information into the scene graph
in the same way that shape information is. In this page I would like to work
out the effect of transforming dynamics information in this way.

The transform allows us to plug in a coordinate in the local frame-of-reference
and get the coresponding coordinate in the absolute frame-of-reference.
|
|
= |
| rxx |
rxy |
rxz |
tx |
| ryx |
ryy |
ryz |
ty |
| rzx |
rzy |
rzz |
tz |
| 0 |
0 |
0 |
1 |
|
|
= |
| Plx * rxx + Ply * rxy
+ Plz * rxz + tx |
| Plx * ryx + Ply * ryy
+ Plz * ryz + ty |
| Plx * rzx + Ply * rzy
+ Plz * rzz + tz |
| 1 |
|
For Solid objects, we need to specify both the location and the orientation
of the object to define its position. So for solid objects we can easily translate
its centre-of-mass (c-of-m) in this way, but how do we translate its orientation?
One way that occurred to me would be to, take a point an infinitesimal distance
away from from the c-of-m, translate that, and then see the orientation of this
point relative to the translated c-of-m.
|
|
= |
| rxx |
rxy |
rxz |
tx |
| ryx |
ryy |
ryz |
ty |
| izx |
izy |
izz |
tz |
| 0 |
0 |
0 |
1 |
|
| Plx + dPlx |
| Ply + dPly |
| Plz + dPlz |
| 1 |
|
= |
| (Plx + dPlx) * rxx + (Ply
+ dPly) * rxy + (Plz + dPlz)
* rxz + tx |
| (Plx + dPlx) * ryx + (Ply
+ dPly) * ryy + (Plz + dPlz)
* ryz + ty |
| (Plx + dPlx) * rzx + (Ply
+ dPly) * rzy + (Plz + dPlz)
* rzz + tz |
| 1 |
|
So the relative position is given by:
|
|
= |
|
- |
|
= |
| dPlx * rxx + dPly * rxy
+ dPlz * rxz |
| dPlx * ryx + dPly * ryy
+ dPlz * ryz |
| dPlx * rzx + dPly * rzy
+ dPlz * rzz |
| 1 |
|
= |
| rxx |
rxy |
rxz |
0 |
| ryx |
ryy |
ryz |
0 |
| izx |
izy |
izz |
0 |
| 0 |
0 |
0 |
1 |
|
|
So to transform a movement, then we transform it by the rotational part of
the transform without the translational part of the matrix. Alternatively, if
we don't want to modify the transform matrix, we could just use 0 for the 4th
row of a relative movement vector, then the translational part will automatically
be ignored.
But if we measuring orientation with 3 angles,
x,
y and
z.
How can we translate this with [T]? This may seem a bit stange as we are using
[T] to define the rotation of the frame-of-reference and
x,
y and
z
to define the orientation in each frame-of-reference. The advantage of using
x,
y
and
z would be that this notation
would fit in better with the physics equations.
Using 6 dimensional vectors to calculate transforms to other frames of reference
For Solid objects, we need to specify both the location and the orientation
of the object to define its position. It might be useful if we could represent
the transform of both location and orientation in one equation. To do this we
need a 6x6 matrix as the position has 6 degrees of freedom.
I am not sure if this will work for position because the normal rules of algebra
don't apply when combining rotations (see
rotations). Can anyone help me prove if this will work?
|
|
= |
| m00 |
m01 |
m02 |
m03 |
m04 |
m05 |
| m10 |
m11 |
m12 |
m13 |
m14 |
m15 |
| m20 |
m21 |
m22 |
m23 |
m24 |
m25 |
| m30 |
m31 |
m32 |
m33 |
m34 |
m35 |
| m40 |
m41 |
m42 |
m43 |
m44 |
m45 |
| m50 |
m51 |
m52 |
m53 |
m54 |
m55 |
|
|
However I am sure it would work for velocities because infinitesimally small
rotations can be combined in the usual way.
|
|
= |
| m00 |
m01 |
m02 |
m03 |
m04 |
m05 |
| m10 |
m11 |
m12 |
m13 |
m14 |
m15 |
| m20 |
m21 |
m22 |
m23 |
m24 |
m25 |
| m30 |
m31 |
m32 |
m33 |
m34 |
m35 |
| m40 |
m41 |
m42 |
m43 |
m44 |
m45 |
| m50 |
m51 |
m52 |
m53 |
m54 |
m55 |
|
|
This 6x6 matrix does not contain any extra information than the 4x4 transform
[T] (even the 4x4 transform has redundant information when we are considering
only a rotation and translation).
However, multiplication of a 6d vector by a 6x6 matrix, might be a lot easier
than multiPlying 4x4 matrix by a 4x4 matrix (which we would have
to do several times if we are going to represent rotations by using matrices).
The advantage of this notation is that:
- The linear and angular quantities are dealt with is the same equation.
- The angular velocities and accelerations are defined in a way that is consistent
with the usual dynamics equations.
Issues:
- Not sure if we can use this to transform points.
- Not sure how we would concatinate transforms (transform within a transform).
Point (
)
Every coordinate point in the local frame of reference can be transformed to
a coordinate in the absolute frame of reference
a
= [T]
l
. This can be thought of as the same point just measured in a different coordinate
reference. A solid object can be transformed in this way by seperately transforming
each point that makes it up.

This transform [T] is a 4x4 matrix and is capable of representing lots of tranforms
such as sheer, scaleing, reflection, etc. which are not valid operations for
a solid body, also it is very wasteful using a 4x4 matrix. Since we only want
to represent translations and rotations, it may be more efficient to represent
it in terms of a 3x3 rotation matrix [R] and a translation
0.
a
= [R]
l
+
0
Where:
a
is the position in absolute coordinates.
- [R] is a 3x3 rotational matrix
-
l
is the position in local coordinates.
0
is the linear translation.
But we still have the problem that [R] could be used to repesent invalid operations
for a solid object, we need to ensure that [R] is orthogonal. The problem is
that if a calculation involves lots of transforms then rounding errors could
distort [R], therefore we need to normalise (or should that be orthogonalise)
after tranforms are combined.
One way round this would be to work from the quaternion
[Q] to represent the rotation, as the quaternion is easier to normalise:
a
= |
| 1 - 2 * ( yy + zz ) |
2 * ( xy - zw ) |
2 * ( xz + yw ) |
| 2 * ( xy + zw ) |
1 - 2 * ( xx + zz ) |
2 * ( yz - xw ) |
| 2 * ( xz - yw ) |
2 * ( yz + xw ) |
1 - 2 * ( xx + yy ) |
|
l
+ 0 |
where:
- xx = qx* qx
- xy = qx * qy
- xz = qx * qz
- xw = qx * qw
- yy = qy * qy
- yz = qy * qz
- yw = qy * qw
- zz = qz * qz
- zw = qz * qw
- qx, qy, qz and qw are the values of the quaternion.
Linear Velocity(
)
a
= d
a
/ dt = d[T]
l
/dT
a
= d a
/ dt = d |
| rxx * Plx + rxy * Ply
+ rxz * Plz + tx |
| ryx * Plx + ryy * Ply
+ ryz * Plz + ty |
| rzx * Plx + rzy * Ply
+ rzz * Plz + tz |
| 0 |
|
/dt |
using partial differential equations:
d (u * v) / dt = u dv/dt + v du/dt
so,
a
= |
| rxx * d Plx/dt + d rxx/dt
* Plx + rxy * d Ply/dt + d rxy/dt
* Ply + rxz * d Plz/dt +d rxz/dt
* Plz + d tx/dt |
| ryx * d Plx/dt + d ryx/dt
* Plx + ryy * d Ply/dt + d ryy/dt
* Ply + ryz * d Plz/dt + d ryz/dt
* Plz + d ty/dt |
| rzx * d Plx/dt + d rzx/dt
* Plx + rzy * d Ply/dt + d rzy/dt
* Ply + rzz * d Plz/dt + d rzz/dt
* Plz + d tz/dt |
| 0 |
|
a
= |
| rxx * d Plx/dt + rxy
* d Ply/dt + rxz * d Plz/dt |
| ryx * d Plx/dt + ryy
* d Ply/dt + ryz * d Plz/dt |
| rzx * d Plx/dt + rzy
* d Ply/dt + rzz * d Plz/dt |
| 0 |
|
+ |
| d rxx/dt * Plx + d rxy/dt
* Ply + d rxz/dt * Plz |
| d ryx/dt * Plx + d ryy/dt
* Ply + d ryz/dt * Plz |
| d rzx/dt * Plx + d rzy/dt
* Ply + d rzz/dt * Plz |
| 0 |
|
+ |
| d tx/dt |
| d ty/dt |
| d tz/dt |
| 0 |
|
therefore:
a
= [T1]
l
+ [T2]
l
+
r
where:
a
= linear velocity of point in absolute coordinates
l
= linear velocity of point in local coordinates
r
= linear velocity of local coordinates relative to absolute coordinates
- [T1] = transform [T] with only rotational components (m03 = m02
= m01 =0)
- [T2] = rate of change of rotational components of [T]
-
| d rxx / dt |
d rxy / dt |
d rxz / dt |
d tx / dt |
| d ryx / dt |
d ryy / dt |
d ryz / dt |
d ty / dt |
| d izx / dt |
d izy / dt |
d izz / dt |
d tz / dt |
| 0 |
0 |
0 |
1 |
|
If the local coordinates are not rotated then:
a
= l
+ r
| [T1]= |
| 1 |
0 |
0 |
0 |
| 0 |
1 |
0 |
0 |
| 0 |
0 |
1 |
0 |
| 0 |
0 |
0 |
1 |
|
| [T2]= |
| 0 |
0 |
0 |
0 |
| 0 |
0 |
0 |
0 |
| 0 |
0 |
0 |
0 |
| 0 |
0 |
0 |
0 |
|
|
Angular Velocity (
)

We have particle or solid object which has an angular velocity wl about point
pl when measured in local coordinates. What will be its angular velocity when
these quantities are measured in absolute coodinates? In the most general case
the transform itself may be changing itself, it may be representing a rotating
frame-of-reference about a different point than the centre of the local rotation.

As shown here
=
x 
So when we are working in absolute coordinates:
a
=
a
x
a
and when we are working in local coordinates:
l
=
l
x
l
So, substituting this in the above equations:
a
x
a
= [T1](
l
x
l)
+ [T2]
l
+
r
Here I am stuck. can anyone help me continue? I think I am making incorrect
assumptions here because the angular velocity of a solid object is just the
rate of change of its orientation. The angular velocity of a particle on the
object takes into account both the translation and the orientation of the object.
So the angular velocity of a solid object and its component particles is different.
If the frame of reference is rotating about
l=
a
then the angular velocities can be added:
a
=
l
+
r
So although the frame-of-reference is moving about a different centre than
the point is rotating, the absolute rotation is still the sum of the roations
of the f-of-r and the local rotation. The actual motion may follow a much more
complex path. See the following examples:
Thank you to the following for helping me with this:
Further information about angular velocity.
Method using Curl
I would like to try and prove that
a
=
l
+
r
using vector calculus.
Given that
a
=
l
+
r
It is shown here that, for a solid
object, that curl(
a)
= 2
a
So if curl(a + b) = curl(a) + curl(b) we could prove that
a
=
l
+
r
The trouble is I can't find any indentity like curl(a + b) = curl(a) + curl(b)?
Can anyone help me?
Angular Acceleration (
)
As with angular velocity, the absolute angular acceleration is the sum of the
angular acceleration of the frame-of-reference and the local angular acceleration:
a
=
l
+
r
This site may have errors. Don't use for critical systems.
Copyright (c) 1998-2008 Martin John Baker - All rights reserved.