The Math Forum

Ask Dr. Math - Questions and Answers from our Archives
Associated Topics || Dr. Math Home || Search Dr. Math

Finding an Orthonormal Matrix to Rotate an n-Dimensional Vector

Date: 08/05/2009 at 05:01:07
From: Reza
Subject: Finding an orthonormal matrix to rotate an n-D vector

Suppose we have two n-dimensional vectors v1 and v2 with the same 
length, i.e., |v1| = |v2|.

How can we build an orthonormal matrix M so that M * v1 = v2?

Is there only one such matrix?

I've read about rotation matrices and know that rotation may not be 
well defined in higher dimensions.  But I'm wondering if there is 
another way to define the problem.

Is there a solution in linear algebra papers or texts?  Is it a 

Date: 08/05/2009 at 09:36:13
From: Doctor George
Subject: Re: Finding an orthonormal matrix to rotate an n-D vector

Hi Reza,

Thanks for writing to Doctor Math.

This is a standard problem in computer graphics.  It turns out that 
there are an infinite number of solutions.

First, let's define some symbols.

1. Let v3 = v1 X v2.
2. Let Q2 be an orthogonal matrix that performs a rotation about v1 
by an arbitrary angle so that Q2 * v1 = v1. This means that v1 is an 
eigenvector of Q2.
3. Let Q1 be an orthogonal matrix that performs a rotation about v3 
by the smallest angle between v1 and v2 so that Q1 * v1 = v2.

We can see that Q1 * (Q2 * v1) = v2.  Now define M = Q1 * Q2 so that

  M * v1 = v2

Since there are an infinite number of options for Q2, there are an 
infinite number of options for M.  The simplest option is when Q2 = I.

Now you just need to know how to construct an orthogonal matrix for a 
rotation about an axis by a specified angle.  For this, you need 
Rodrigues' Rotation Formula.  Here are two articles that explain it:


Does that make sense?  Write again if you need more help.

- Doctor George, The Math Forum 

Date: 08/05/2009 at 10:00:03
From: Reza
Subject: Finding an orthonormal matrix to rotate an n-D vector

Thank you for your kind help.  The references are also very useful.  

But I still want to know if there is an extension to more than 3 
dimensions.  Can the vectors v1 and v2 be in R^n (n > 3)?  For such 
cases, rotation may not make sense.  But still an n x n matrix M can 
be found so that its orthonormality might be satisfied.

Is there an extension of Rodrigues's algorithm to more than 3 

Date: 08/05/2009 at 11:46:48
From: Doctor George
Subject: Re: Finding an orthonormal matrix to rotate an n-D vector

Hi Reza,

Sorry for missing the n > 3 part of your question.  I don't think 
there is a direct extension of Rodrigues' Formula, but I am sure that 
the problem is solvable in higher dimensions, as well.

Think about the 3D case again.  The matrix M can be broken down into 
a sequence of rotations in the xy, yz, and zx planes.  In the n 
dimensional case, we need to extend this idea and find a sequence of 
rotations in each 2D subspace.  These are called Givens rotations or 
Jacobi rotations.


It takes some programming to do this.

I'll also open the question to the other math doctors to see if they 
have other suggestions.

- Doctor George, The Math Forum 

Date: 08/06/2009 at 03:07:06
From: Doctor Jacques
Subject: Re: Finding an orthonormal matrix to rotate an n-D vector

Hi Reza,

You can also use reflections:  these are orthogonal transformations.  
If u is a unit vector, a reflection R with respect to the hyperplane 
perpendicular to u is given by:

  R(x) = x - 2u<u,x>

Here, <u,x> is the scalar product.  In matrix form, using column 
vectors for x and u, we have <u,x> = u'x, where u' is the transpose 
of u; and this becomes:

  R(x) = x - 2*u*u'*x
       = (I - 2uu')x

This shows that the reflection is described by the matrix I - 2uu'. 
This is known as a Householder reflection, the details of which you 
can read here, along with a description of the more general case of 
complex vectors:


As a reflection is an isometry, this matrix is orthogonal, i.e., 
RR' = I (this can also be checked directly).

If you want the reflection to map v1 to v2, you only need to take u 
as the unit vector proportional to (v1 - v2).

Although this matrix will be orthogonal, it will not be a rotation, 
because its determinant will be -1. A rotation corresponds to an 
orthogonal matrix with determinant +1. If you insist on having a 
proper rotation, you can simply combine the reflection above with 
another reflection that leaves both vectors fixed:  the product of 
two reflections is a rotation.

For the latter reflection, you need to pick a unit vector t 
perpendicular to both v1 and v2; this corresponds to a reflection 
with respect to a hyperplane containing v1 and v2.  In three 
dimensions, you can find this vector by computing the cross product 
v1 x v2, and normalizing to have |t| = 1.  In higher dimensions 
(n > 3), you must satisfy these relations:

  <t,v1> = 0
  <t,v2> = 2

This is a homogeneous system of 2 equations in n unknowns. If n >= 3, 
it always has at least one non-zero solution.  If n > 3, you have 
many more solutions.  You can multiply that solution by a constant 
factor to have a unit vector.  If S is the matrix corresponding to 
this reflection, we have ...

  S = I - tt'

... and the matrix RS will describe a rotation sending v1 to v2.

Note that this rotation actually exchanges v1 and v2.  If you use 
this technique in 3D space, this rotation is not what you would 
naively expect:  it is a rotation of 180 degrees.

Date: 08/06/2009 at 14:21:16
From: Reza
Subject: Thank you (Finding an orthonormal matrix to rotate an n-D 

Thank you, all.  I am grateful for your help.
Associated Topics:
High School Linear Algebra

Search the Dr. Math Library:

Find items containing (put spaces between keywords):
Click only once for faster results:

[ Choose "whole words" when searching for a word like age.]

all keywords, in any order at least one, that exact phrase
parts of words whole words

Submit your own question to Dr. Math

[Privacy Policy] [Terms of Use]

Math Forum Home || Math Library || Quick Reference || Math Forum Search

Ask Dr. MathTM
© 1994- The Math Forum at NCTM. All rights reserved.