Physics Stack Exchange is a question and answer site for active researchers, academics and students of physics. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a very simple question. In our project we store an object's orientation as a 3x3 matrix which holds the orthonormal base of that object's local space. For instance if the object is aligned with the axis of the world, then its orientation matrix is :

1 0 0
0 1 0
0 0 1

Now we store the angular velocity as a vector that contains values in rad/s around each of the world's axis. For example if the object should rotate around the world's y axis at 20 rad/s, then the angular velocity is

0 20 0

My question is then, say we want to apply this velocity over 1 second to the orientation matrix, how would we do this?

share|cite|improve this question
up vote 3 down vote accepted

The rate of change of the rotation matrix $\boldsymbol R$ is

$$ \dot{\boldsymbol{R}} = \vec{\omega} \times \boldsymbol{R} $$

where $\vec\omega\times = \begin{pmatrix} 0 & -\omega_z & \omega_y \\ \omega_z & 0 & -\omega_x \\ -\omega_y & \omega_x & 0 \end{pmatrix}$ is the cross product operator in 3x3 form.

So if the position of a point A rotating on a frame is given by $\vec{r}_A = \vec{r} + \boldsymbol{R} \,\vec{p} $ where $\vec{p}$ is the position in local coordinates and $\vec{r}$ the location of the frame, the kinematics are

$$ \dot{\vec{r}}_A = \dot{\vec{r}} + \dot{\boldsymbol R}\,\vec{p} \\ \vec{v}_A = \vec{v} + \vec{\omega} \times (\boldsymbol{R}\,\vec{p}) $$

$$ \dot{\vec{v}}_A = \dot{\vec{v}} +\dot{\vec{\omega}} \times (\boldsymbol{R}\,\vec{p}) + \vec \omega \times (\dot{\boldsymbol{R}}\,\vec{p}) \\ \vec{a}_A = \vec{a} + \vec{\alpha}\times(\boldsymbol{R}\,\vec{p}) + \vec\omega\times\vec\omega\times(\boldsymbol{R}\,\vec{p}) $$

share|cite|improve this answer

From Goldstein, chapter 4 eqn 4-92', for a finite rotation the change $\boldsymbol{\Delta r}$ caused by rotating a vector $\boldsymbol{r}$ through an angle $\Phi$ about a direction defined by a unit vector $\boldsymbol{n}$ ($\Phi$ positive for a counter-clockwise rotation), to a final position $\boldsymbol{r'}$ is given by:

$$ \boldsymbol{\Delta r} = \boldsymbol{r'-r} = [\boldsymbol{n} (\boldsymbol{n \cdot r} ) - \boldsymbol{r} ] [ 1 - \cos \Phi ] + (\boldsymbol{n \times r}) \sin \Phi $$

Relating this equation to your situation, with an angular momentum vector $\boldsymbol{\omega}$ applied for a time $t$:

$$ \boldsymbol{n} = \frac{\boldsymbol{\omega}}{|\boldsymbol{\omega}|} , \Phi = |\boldsymbol{\omega}| \, t $$

Since your angular velocity vector $\boldsymbol{\omega}$ is given with respect to the fixed world coordinate system $\boldsymbol{x_1, x_2, x_3}$, it's straightforward to compute components in that basis:

$$ \Delta r'_i = \left[ n_i \sum_{j=1}^3\left(n_j r_j \right) - r_i \right][1-\cos \Phi] + \sum_{j,k=1}^3 \left( \epsilon_{ijk} n_j r_k \right) \sin \Phi $$

In particular, these formulas apply to the basis vectors of your object's local space, so you can use them to evolve your storage matrix.

For the specific example you mention, $\boldsymbol{n = x_2}$ and $\Phi =20$ rad/s $* 1 $s $ = 20 $ rad. Plugging in the 3 object basis vectors $\boldsymbol{x'_1, x'_2, x'_3}$ (which in this case are just equal to the world basis vectors $\boldsymbol{x_1, x_2, x_3}$ respectively) for $\boldsymbol{r}$, you can see that:

  • The $\boldsymbol{x'_2}$ body axis is unchanged (as expected for a vector parallel to the angular velocity)
  • $\boldsymbol{x'_1}$ and $\boldsymbol{x'_3}$ rotate around a unit circle (again as expected).
share|cite|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.