1

I have one problem related to rotation of point in 3D-space.

Suppose I have one point with X, Y and Z coordinates.

And now I want to rotate it, by specifying the rotation in one of these three ways:

  1. By user-defined degree
  2. By user-defined axis of rotation
  3. Around (relative to) user-defined point

I found good link over here, but it doesn't address point 3. Can anyone help me solve that?

unwind
  • 391,730
  • 64
  • 469
  • 606
Pritesh
  • 3,208
  • 9
  • 51
  • 70
  • Is this an opengl related question? – Kai Mar 17 '11 at 09:31
  • @Kai, No it is just a mats related Question......Just Rotation Of Point In 3D Space........ Thanks...... – Pritesh Mar 17 '11 at 09:32
  • what is the meaning of point 3? how is it different from a simple axis? – Protostome Mar 17 '11 at 09:32
  • @Protostome, where you fine point 3? though i giving answer by my understanding, Point3D means Point with X, Y and Z Co-Ordinate....... – Pritesh Mar 17 '11 at 09:35
  • The third question is not well defined. To rotate in 3D you must choose an axis; through the user-defined point there are (infinitely) many axes, and each one will give a different rotation. – Beta Mar 17 '11 at 17:17

1 Answers1

8

All rotations will go around the origin. So you translate to the origin, rotate, then translate back.

T = translate from global coordinates to user-coordinates
R = rotate around the origin (like in your link)
(T^-1) = translate back
point X

X_rotated = (T^-1)*R*T*X 

If you have multiple points to rotate then multiply the matrices together:

A = (T^-1)*R*T
X_rotated = A*X
Martin DeMello
  • 11,876
  • 7
  • 49
  • 64
Adam
  • 16,808
  • 7
  • 52
  • 98
  • 3
    ya but is there any practical example? – Pritesh Mar 17 '11 at 09:38
  • 3
    Translation is not done my matrix multiplication but by vector subtraction. Therefore, if * means just matrix multiplication, this doesn't work. If * means concatenation of some transformations it makes some sense, but you still can not just "multiply" (*) translation (=vector subtraction) with rotation (=matrix multiplication) and get another matrix as result. – Curd Mar 17 '11 at 09:44
  • 6
    @curd: there's a very standard mathematical technique whereby you augment your vectors and the matrix with one extra dimension, and can then represent any affine transformation, including translations, as matrix multiplication. see http://en.wikipedia.org/wiki/Transformation_matrix for instance. – Martin DeMello Mar 17 '11 at 10:22
  • 3
    @Martin DeMello: ok, thanks to point this out. So also translation can be expressed easily as matrix multiplication within a special formalism that uses 4 dimensions. This is, however, not obvious and nowhere mentioned in the answer. Or let me say it this way: anybody being familiar with this formalism wouldn't need to ask the question. – Curd Mar 17 '11 at 10:48
  • 2
    @curd: true, but anyone wanting to have this question answered would do well to start by learning that formalism. it really is one of the first things you learn when studying this sort of geometric manipulation. – Martin DeMello Mar 17 '11 at 19:28