I have a basic question about the rotation matrix R (in d-dimensional
space). Assume that R is composed of n rotation matrices by successive
multiplication : R=R_1*R_2*...R_n.
Each R_i is a rotation matrix, but it rotates only around "one" axis.
Assume that we are given the matrix R, and the goal is to determine
along how many axes it rotates, i.e. determining "n" from R.
How is this possible? (I don't need the matrices R_i, just knowing n
is enough).
To keep the problem well defined, it is assumed that "n" is the
"minimal" number of rotations along single axes to construct R. This
is to prevent some R_i's along the way which might cancel out the
effect of each other, such as rotation along an axis by "t" followned
by rotation along the same axis by "-t".
Examples: n for identity matrix is always 0. In 3D space. Also n for
matrix [cos(t) -sin(t) 0; sin(t) cos(t) 0; 0 0 0] is always 1 for any
t.
Your help would be highly appreciated.
Regards
Golabi
This is not a rotation. The last line should have been 0 0 1.
Anyway, the answer to your question is negative. This is so because the
rotations form a group and therefore what you call "the "minimal" number
of rotations along single axes to construct R" is always 1. In other
words, if R_1, ..., R_n are rotations, then R_1 o R_2 ... o R_n is also
a rotation.
Best regards,
Jose Carlos Santos
> This is not a rotation. The last line should have been 0 0 1.
Right, that was a typo.
> Anyway, the answer to your question is negative. This is so because the
> rotations form a group and therefore what you call "the "minimal" number
> of rotations along single axes to construct R" is always 1. In other
> words, if R_1, ..., R_n are rotations, then R_1 o R_2 ... o R_n is also
> a rotation.
If I understand you correctly, you say that R=R_1 R_2 ... R_n would be
equivalent to rotation along a single vector "v"... i.e., I can
represent R by a single vector unit vector "v" and a single angle
"theta".
If that is what you meant, is there a way to extract "v" and "theta"
from "theta"?
Regards
Golabi
by from theta I meant from R.
>> Anyway, the answer to your question is negative. This is so because the
>> rotations form a group and therefore what you call "the "minimal" number
>> of rotations along single axes to construct R" is always 1. In other
>> words, if R_1, ..., R_n are rotations, then R_1 o R_2 ... o R_n is also
>> a rotation.
>
> If I understand you correctly, you say that R=R_1 R_2 ... R_n would be
> equivalent to rotation along a single vector "v"... i.e., I can
> represent R by a single vector unit vector "v" and a single angle
> "theta".
Why do you say "equivalent to"? What I meant was that R *is* a rotation.
> If that is what you meant, is there a way to extract "v" and "theta"
> from "theta"?
Find an eigenvector _v_ of R with eigenvalue 1. Then R is a rotation
around that line passing through _v_ and the origin.
Then take a non-null vector _w_ orthogonal to _v_ and consider the
vectors _w_ and R.w. Then the angle theta between them will be your
angle.
...but the OP is interested in rotations that fix just one axis - e.g. a
rotation that fixes a whole plane would have to be represented as a product
of more than one "axis" rotations.
Hmmm, in 4-d are there any rotations that fix just a single axis? (My
visualising powers are failing me, but surely if a particular axis is fixed,
then the 3-d perpendicular space would also undergo a rotation and then
there would be a second fixed axis within the 3-d space?)
Mike.
I suspect that the OP was mainly interested in the 3-dimensional case,
but let us wait until he enlightens us.
> Hmmm, in 4-d are there any rotations that fix just a single axis? (My
> visualising powers are failing me, but surely if a particular axis is fixed,
> then the 3-d perpendicular space would also undergo a rotation and then
> there would be a second fixed axis within the 3-d space?)
Right.
Technically they are rotations about a (d-2)-space. It is only in 3D
that the space is a 1-dimensional axis. In 2 dimensions the space is
a point, in 4 dimensions it is a plane.
> Assume that we are given the matrix R, and the goal is to determine
> along how many axes it rotates, i.e. determining "n" from R.
As stated the answer is no, since any rotation matrix can be expressed
as a product of any number of distinct rotation matrices. After all,
R is a rotation matrix about some "axis" itself, so R = R_1 is a valid
composition.
However, trying to read between the lines: do you perhaps have a fixed
set of "axes" and want to express R as a product of rotation matrices
corresponding to only those axes and no others? E.g. in 3D only
rotations about the X, Y, and/or Z axes?
- Tim
This is true only in 3 dimensions. In 4 dimensions a general rotation
may leave only the origin fixed, though it can always be decomposed
into two rotations in orthogonal planes.
(My previous post stating that this holds for all higher-dimensional
spaces was incorrect)
- Tim
Perhaps, though the space was specified as "d-dimensional".
- Tim
Most of the responses had a point like the following about the choice
of axes.
On Nov 22, 5:42 pm, Tim Little <t...@little-possums.net> wrote:
> However, trying to read between the lines: do you perhaps have a fixed
> set of "axes" and want to express R as a product of rotation matrices
> corresponding to only those axes and no others? E.g. in 3D only
> rotations about the X, Y, and/or Z axes?
>
> - Tim
In order to answer that, let me describe the origin of the problem,
which is data compression. That is, instead of storing a dxd matrix R
(i.e. d^2 floating point numbers), I would like to store as few
numbers as possible. Now from your responses I obtained two solutions:
1. Instead of the dxd matrix R, I can only store a vector "v" (of
length d), which is the rotation axis, and an angle theta. So I
totally store only d+1 floating point numbers here. This is based on
Jose's comment that says I can construct any R merely by knowing its
axis v and theta.
2. Following up Tim's question, I can also represent R by storing
theta_1 through theta_d where each theta_i determines by how much I
should rotate along "standard" bases e_1 through e_d. The advantage of
this approach is that I do not need to store any axis, because stndard
bases are fixed and known, and I can describe R by d floating point
numbres theta_1 through theta_d.
So, if I understand your comments correctly, the second approach saves
more memory and thus is more suitable for me. However, I do not know
how I can extract theta_1 through theta_d from some rotation matrix R.
Is it easy?
Thanks
Golabi
There are generally d(d-1)/2 degrees of freedom for rotations in d
dimensions.
> 1. Instead of the dxd matrix R, I can only store a vector "v" (of
> length d), which is the rotation axis, and an angle theta.
Only for d=3. In even dimensions, there is never a single rotation
axis. In odd dimensions of higher order there may be an axis left
unchanged by a rotation, but it is not fully characterized by a single
angle.
It is still possible to compose any rotation from a product of
1-parameter "basis" rotations, but for d > 3 it will generally take
more than d of them.
- Tim
I see. Thank you very much for the response.
Regards
Golabi
I might add to it (or perhaps others did, too, so you may be stuck with a
repetition):
A rotation matrix (orthogonal with determinant 1) can have eigenvalue
(-1), but only with even multiplicity; the subspace spanned by the
corresponding eigenvectors is the subspace where every vector gets
reversed. (Something like rotating by angle pi around the origin, and the
plane of this rotation is not determined uniquely).
This matrix can have eigenvalue 1 with any multiplicity (as far as the
dimension allows), and the eigenvectors span a "fixed subspace", which may
be considered an extension of the "axis of rotation". But then again,
number 1 need not be an eigenvalue -- no "axis".
The remaining orthogonal complement will have even dimension. If this
dimension is positive, this piece of the space will break down into an
orthogonal sum of two-dimensional (proper) rotations, as we know them from
plane geometry.
(This has something to do with the fact that a real polynomial factors
into real factors of any multiplicity, and quadratic factors without real
roots.)
Hope it helps,
ZVK(Slavek).