0% found this document useful (0 votes)
45 views3 pages

3D Rotation About an Arbitrary Axis

This document describes how to rotate a point P about an arbitrary axis defined by a point B and unit direction vector n through three steps: 1) Compute an offset point C by translating B along n 2) Compute perpendicular vectors u and v based on P, C, and n 3) Rotate P around the axis defined by u and v using a standard rotation formula This process can be represented by a single 4x4 transformation matrix for rotating any point about an arbitrary axis.

Uploaded by

scribdavidm
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views3 pages

3D Rotation About an Arbitrary Axis

This document describes how to rotate a point P about an arbitrary axis defined by a point B and unit direction vector n through three steps: 1) Compute an offset point C by translating B along n 2) Compute perpendicular vectors u and v based on P, C, and n 3) Rotate P around the axis defined by u and v using a standard rotation formula This process can be represented by a single 4x4 transformation matrix for rotating any point about an arbitrary axis.

Uploaded by

scribdavidm
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Rotation about an Arbitrary Axis

Dr. Thomas W. Sederberg


23 February 2005

1 Eye Position
The standard way to compute a rotation about an arbitrary axis through the origin is to
concatenate five rotation matrices. This note shows how vector algebra makes it easy to
rotate about an arbitrary axis in a single step.
Figure 1 shows a point P which we want to rotate an angle θ about an axis that passes
through B with a direction defined by unit vector n. So, given the angle θ, the unit vector
n, and Cartesian coordinates for the points P, B, we want to find Cartesian coordinates
for the point P′ .

P’
θ P

y n
z x
B

Figure 1: Rotation about an Arbitrary Axis

The key insight needed is shown in Figure 2. Let u and v be any two three-dimensional

r v sinθ
θ u
C u cosθ

Figure 2: Key Insight


vectors that satisfy u · v = 0 (that is, they are perpendicular) and |u| = |v| =
6 0 (that is,
they are they same length but not necessarily unit vectors). We want to find a vector r
that is obtained by rotating u an angle θ in the plane defined by u and v. As suggested in
Figure 2,
r = u cos θ + v sin θ. (1)
With that insight, it is easy to compute a rotation about an arbitrary axis. Referring

v P’
r
C θ
u P

y n
z x

Figure 3: Rotation about an Arbitrary Axis

to Figure 3, we compute
C = B + [(P − B) · n]n. (2)
u =P−C (3)
v = n×u (4)
Then, r is computed using equation (1), and

P′ = C + r. (5)

It is possible to take these simple vector equations and to create from them a single
4 × 4 transformation matrix for rotation about an arbitrary axis. Let P = (x, y, z), P′ =
(x′ , y ′ , z ′ ), B = (Bx , By , Bz ), and n = (nx .ny , nz ). We seek a 4 × 4 matrix M such that
   

 x 
 
 x′ 


 y 
  y′ 
 
M =



z 





z′ 



1   
1

(Cx , Cy , Cz ) = (Bx , By , Bz ) + [xnx + yny + znz − B · n](nx , ny , nz ) (6)

Cx = xn2x + ynx ny + znx nz + Bx − (B · n)nx (7)


Cy = xnx ny + yn2y + zny nz + By − (B · n)ny (8)
Cz = xnx nz + yny nz + zn2z + Bz − (B · n)nz (9)
u = (x, y, z) − (Cx , Cy , Cz ) (10)

ux = x(1 − n2x ) − ynx ny − znx nz + (B · n)nx − Bx (11)


uy = −xnx ny + y(1 − n2y ) − zny nz + (B · n)ny − By (12)
uz = −xnx nz − yny nz + (1 − n2z ) + (B · n)nz − Bz (13)

vx = ny uz − nz uy (14)
vy = nz ux − nx uz (15)
vz = nx uy − ny ux (16)

rx = ux cos θ + (ny uz − nz uy ) sin θ (17)


ry = uy cos θ + (nz ux − nx uz ) sin θ (18)
ry = uy cos θ + (nx uy − ny ux ) sin θ (19)

(x′ , y ′ , z ′ ) = (Cx + rx , Cy + ry , Cz + rz ) (20)

x′ = xn2x + ynx ny + znx nz + Bx − (B · n)nx + (21)


(x(1 − n2x ) − ynx ny − znx nz + (B · n)nx − Bx ) cos θ + (22)
ny (−xnx nz − yny nz + (1 − n2z ) + (B · n)nz − Bz ) sin θ − (23)
nz (−xnx ny + y(1 − n2y ) − zny nz + (B · n)ny − By ) sin θ (24)

x′ = x[n2x (1 − n2x ) cos θ] + y[nx ny (1 − cos θ) − nz sin θ]


+ z[nx nz (1 − cos θ) + ny sin θ] + (Bx − (B · n)nx )(1 − cos θ) + nz By − ny Bz . (25)

Since n2x + n2y + n2z = 1, (1 − n2x ) = n2y + n2z . In like manner we can come up with an
expression for y ′ and z ′ , and our matrix M is thus

n2x + (n2y + n2z ) cos θ


 
nx ny (1 − cos θ) − nz sin θ nx nz (1 − cos θ) + ny sin θ T1

 nx ny (1 − cos θ) + nz sin θ n2y + (n2x + n2z ) cos θ ny nz (1 − cos θ) − nx sin θ T2 
nx nz (1 − cos θ) − ny sin θ ny nz (1 − cos θ) + nx sin θ n2z + (n2x + n2y ) cos θ T3 
 

0 0 0 1
(26)
with
T1 = (Bx − (B · n)nx )(1 − cos θ) + nz By − ny Bz
T2 = (By − (B · n)ny )(1 − cos θ) + nz Bx − nx Bz
T3 = (Bz − (B · n)nz )(1 − cos θ) + nx By − ny Bx

You might also like