Tip:
Highlight text to annotate it
X
In this segment of the course we are going to talk about 3D rotations. 3D rotations is
a topic that has engaged many of the greatest minds of our civilization over centuries.
It's also a topic in which I have a special interest because my first academic SIGGRAPH
paper was on interpolating 3D rotations.
First let's review the 2D case. In that case we know that the new coordinate x' is given
by cosine theta times x minus sine theta times y. y' is given by sine theta times x and cosine
theta times y. One of the important properties of this matrix which we haven't talked about
so far is that it's orthogonal.
Most directly that means R transpose R is the identity (R^T * R = I) and in fact we
can multiply that out explicitly.
I am just going to use c for cos and s for sin.
The transpose matrix will be given by cos, sin, -sin, cos and I have to multiply this
by cos, -sin, sin, cos. Okay, so now notice what happens here. Cos times cos is cos squared,
sin times sin is sin squared. But you know that cos squared plus sin squared is equal
to 1, so this is just 1. cos times -sin is -sin cos sin times cos is sin cos. This is
equal to 0.
-sin times cos, -sine cos plus cos times sine is plus cos sine, so that will be equal to
0.
And finally, you have -sin times -sin, sin squared, plus cos squared, which will be equal
to 1. So, indeed, that's equal to the identity. There are also other interpretations of this.
What we mean when R transpose R is the identity is that columns and rows are orthogonal. So
if you look at a column like this, cos sin times -sin cos, -cos sin, sine cos will be
equal to 0. Column dot product with itself, cos squared plus sine squared is equal to
1.
Let's now consider rotations in 3D about the coordinate axes. The 2D case could be considered
a special case where we're rotating about the Z axis. Since the Z axis therefore does
not change, the matrix values will be 0, 0 and 1, 0, 0 and 1.
And the X and Y coordinates will be the same as before: cos, -sin, sin cos. Similarly for
rotation about the X axis, 1, 0, 0, 1, 0, 0, cos -sin, sin cos. Y axis similarly here.
Since Y is equal to Z cross X, it's a little bit different from these where the cos, -sin,
sin, cos are together but it still has the same form.
All of these cases are orthogonal, R transpose R is the identity. And even in 3D because
it's a matrix, it must follow that it's linear. We now come to the geometric interpretation
of 3D rotations. We can think about the rows of the matrix as being unit vectors of a new
coordinate frame.
So, we can think of this as being the u vector, the v vector, the w vector, where x_u is the
X coordinate of the u vector, y_u is the Y coordinate of the u vector, and z_u is the
Z coordinate of the u vector. Similarly for the v vector and the w vector. When I say
the u vector is the axis of the new coordinate frame, the vector u will be equal to x_u times
the X direction plus y_u times the Y direction, plus z_u times the Z direction. The corollary
of this is that given 3 orthonormal vectors, and orthonormality means that, this u vector
dot with v vector has to be equal to 0, u vector dot with w vector has to be equal 0,
v dot w has to be equal to 0, and u, v and w are unit vectors.
So given any 3 such vectors it's just a rotation of the standard XYZ coordinate systems and
we can create a rotation matrix from there. There's also another interesting way of thinking
about this which is that the rotation matrix times a point. What happens?
So we can write down the rotation matrix in this form. So we have the u vector, the v
vector and the w vector. All of these are vectors, times a point, right. So we have
the point p here.
Okay. So what's going to happen is you are going to say, u, x_u, x_p, y_u, y_p, z_u,
z_p. That's just u dot p. So this will be equal to u dot product with p, v dot product
with p and w dot product with p. So really, what we are doing is just taking the projections
of the point p in this new coordinate frame.
So we have u dot p, v dot p and w dot p. This is a very simple interpretation of 3D rotations
that you have a new coordinate frame and you're taking the dot product of a point p in this
new coordinate frame.
To summarize, the rows of a matrix are 3 unit vectors of the new coordinate frame, rows
of a rotation matrix. We can similarly construct a rotation matrix from any 3 orthonormal vectors.
Effectively this is a projection of a point into the new coordinate frame.
So the new coordinate frame, or the rotation matrix associated with it, takes the u, v
and w coordinates to the cartesian components X, Y and Z. Its easy to see. So, if x_p, y_p
and z_p correspond to u, then you have u dot p, which is u dot u, which will be 1, 0, 0.
The v axis will become Y, the w axis will become Z.
The inverse of this rotation matrix takes the XYZ axes to u, v and w. That's a useful
property to note that a coordinate frame can be interpreted as stating these new coordinates
u, v, and w, and making them equal to X, Y, and Z. The inverse can be interpreted as taking
X, Y, and Z, and making them equal to u, v, and w.
3D rotations are not commutative. In particular if you rotate by X and then by Y it's not
the same as rotating by Y and then by X. So here we have our teapot in the standard coordinate
system and the thing that I am going to do is move my right. So I am going to count 20
steps right. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
11. And similarly go up 1,2,3,4,5,6,7,8,9,10,11. And you can see here that the teapot is aligned
in this way. It's essentially in a diagonal position from the bottom left to the top right.
Take a look and remember where the teapot was here because now I am going to go and
do it the other way.
So, I'm going to do 11 steps like this: 3, 4, 5, 6, 7, 8, 9, 10, 11 and then, 1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11 and now the teapot is certainly not positioned along the diagonal
from top left to bottom right and it actually looks fairly different. When you complete
homework 1, I would encourage you to try similar kinds of experiments to convince yourself
that 3D rotations are not commutative.
This of course follows directly from matrix multiplications, applying R1 times R2 is not
the same as R2 times R1.
Finally the question is, can we come up with an arbitrary rotation formula for 3D rotations?
The setup is as follows, I want to rotate by an angle theta, about an arbitrary axis
a. This is known as the axis-angle form of rotations, there are many other ways of specifying
rotations. You may want to look up quantities like, the Euler angles or quaternions. But,
so far we are just going to talk about axis-angle rotations. This has particular importance
for homework 1, where you must rotate the eye and the up direction as you move about
the teapot.
The derivation is fairly mathematical and we will be going through the key steps in
it. The final formula is reasonably simple and is useful to you. So lets look at the
problem setup. You have to rotate a vector b or a point b by an angle of theta about
the axis a.
If you want to do a sanity check on what follows, it's convenient to say b is the X axis and
a is the Z axis. So rotation by an angle theta is just rotating a point on the X axis towards
the Y axis. And in this way, you can verify that we do in fact get the right results.
But we are going to derive it generally for b and theta.
This derivation is carried out in 3 steps.
We can regard this as the vector a, and we can regard this as the vector b. So it's going
to rotate about a by some angle theta. So in this case, b will actually be rotating
into the plane of the slides.
So before we do the rotation there are some properties about b that we can consider. So
if you look at b it has a component which is orthogonal to a and it has a component
which is along a. So we can write this as the parallel and the perpendicular components
of b along a, so that this is the parallel component and this is the perpendicular component.
The parallel component of b just lies along the vector a.
And therefore, it is unchanged. And this is just as you rotate about a given axis, that
axis will remain unchanged. Now, we know what the formula for the vector b, the component
along a is. And that is just going to be given by the quantity a dot b. So we can consider
the dot product of a and b. Assuming that both of these quantities are unit vectors,
so no normalization is needed. And that lies along the direction, a.
So that's what b parallel is equal to. And b perpendicular is essentially equal to the
vector b minus the parallel component.
The second part of our formula says, what happens to the vector b when it rotates? And
therefore we need to define a vector c, which is orthogonal to both a and b and in this
case, would be into the plane of the slides. Remember I told you to think about the vector
a as the Z axis and the vector b as the X axis. So if you rotate the X axis about Z
you eventually go to the Y axis and so the vector c should be the Y axis.
In general there will be a definition in terms of cross products. And we can define the vector
c as being equal to a cross b. The nice thing is that the cross product automatically takes
into account the parallel component and so it takes into account the magnitude of the
perpendicular component, which is nice.
So we want this a cross b but the amount of rotation matters. So the component along c
will be equal to c times how much you are rotating. Only sin theta will actually be
rotated, and then the remaining component is just going to be the b perpendicular component
times cosine theta. And finally, we have the parallel component which doesn't change.
Putting it all together we get this formula. This formula requires that we consider matrices,
so so far we have considered the components in terms of vectors. But we can convert those
into a representation of matrices. But first let's consider the parallel component, which
is the component along a, which is unchanged. We saw here that this is going to be a dot
b times a, but we want to write this in matrix and vector notation.
So this is going to be equal to a transpose b times a ((a^T b) * a). All that I've done
since this quantity is a scalar, I can move the a to the other side and rearrange it to
get a a transpose times b ((a a^T) * b). I can now do the same thing for the other components
so c is equal to a cross b and so here we said a cross b times sin theta. So this value
is equal to a cross product of b times the sin. Right? Sin theta.
Okay, but a cross b, we already know that cross products can be written in terms of
this dual matrix which is "A star" (A*), takes into account sin theta so, a cross b is equal
to A* times b and we have the sin theta. Finally, we come to the component along a which is
unchanged so, this is the perpendicular component which will be given by the identity -a * a
transpose, perpendicular will be given by b minus b parallel. This will be equal to
the identity minus a * a transpose. Because we have here a * a transpose identity minus
a * a transpose. And that gets multiplied by cosine theta. What happens to the perpendicular
component? You get identity, minus a * a transpose, both multiplied by cosine theta, plus A* sin
theta. And all of these are eventually multiplied by the vector b.
So now the rotation can be written as some general matrix, which we'll say is some M
times b (M * b).
So, we have identity times cosine theta, which is just the unchanged component of the vector.
And then we have, a * a transpose here which is one and minus the cosine theta component
here. And this is the component along the vector a, which is unchanged, and finally
we have the perpendicular, rotated component A* sin theta.
So, finally this is the rotation formula for general axis-angle. If you didn't fully follow
the derivation, that's okay. In homework 1, you only need the final formula, but I hope
I've given you some intuition for why this fairly complicated formula comes about.
I can also simplify that further and so if x, y and z are the Cartesian components of
the vector a, then the rotation matrix can be written in this way, it's a quadratic form
in components of the vector a and this is often known as the Rodrigues rotation formula.