# Finding rotation matrix "component" around a vector

I am trying to figure out a way to calculate the angle that a vector gets rotated around itself if a rotation matrix is applied to it.

For example if we take a vector $$\vec{k} = (0, 0, 1)$$ and rotate it $$45^{\circ}$$ around the Z axis (in this case the vector itself), well end up with the same vector $$\vec{k'} = (0, 0, 1)$$ but it essentially rotated around Z axis by $$45^{\circ}$$. What I am interested in calculating is that $$45^{\circ}$$ angle for more complex rotations around multiple axes and vectors that are not on any particular axis.

If we find a vector that is orthogonal to $$\vec{k}$$, for example, $$\vec{i} = (1, 0, 0)$$, and we apply that same rotation to it we'll end up with a rotated vector $$\vec{i'} = (0.707, -0.707, 0)$$. In this particular case I could just calculate the angle between $$\vec{i}$$ and $$\vec{i'}$$ and get my answer, but if the rotation was around multiple axes and not just Z that would not work.

Is there a way to calculate this rotation matrix "component" (there might be a more appropriate term for this?)? Would it be possible to split the original rotation matrix into 2 parts - rotation matrix that only has elements which directly affect the output vector, and an angle that the vector gets rotated around its own axis?



Edit 1: An example of a more complicated rotation matrix

If we have a vector $$\vec{v} = (0, 0, 1)$$, an orthogonal vector $$\vec{x} = (0.707, 0.707, 0)$$ and a rotation matrix:

M =
0.500   0.707  -0.500
-0.500   0.707   0.500
0.707   0.000   0.707


If we apply the rotation matrix to $$\vec{x}$$ we get $$\vec{Mx} = (0.854, 0.146, 0.5)$$.

If we then plot those vectors and view directly into a plane that $$\vec{v}$$ is normal of (in this case XY plane but can be any 2D plane), what I would like to know is the angle that I need to rotate $$\vec{x}$$ around $$\vec{v}$$ by to have it overlap with $$\vec{Mx}$$ in that view.

In this case the answer is around $$35.2^\circ$$ (manual try and error)

Note: $$\vec{v}$$ is usually not on one of the coordinate axes, this is just easier explain with (I think). Another example could be $$\vec{v} = (0.424, 0.566, 0.707)$$

Visual example

Say non-zero $$v \in \mathbb{R}^{3}$$ defines the line we rotate around by matrix $$M$$. Pick arbitrary non-zero $$x \in \mathbb{R}^{3}$$ with $$\| x \| = 1$$ and $$\langle x, v \rangle = 0$$. Now $$Mx$$ is the rotated vector and $$\| Mx \| = 1$$ as well, also $$\langle Mx, v \rangle = 0$$. Now compute $$\| x - Mx \|$$.
So you have a triangle with two sides equal to 1 and one side equal to $$\| x - Mx \|$$. That should be enough info to calculate the angle.
You are allowed to skip the condition $$\| x \| = 1$$ btw. Note $$Mv = v$$.
• Hi, thanks for this. It would work fine for the case when rotation happens around v (or as you note Mv = v), which is like the example in the question. However I am trying to solve for when rotation happens around any axis that is not necessarily v, for which case this does not work anymore Jun 29, 2021 at 20:20
• This works for any non-zero $v$. Jun 29, 2021 at 20:55
• Hi @Elmex80s, I have added a more complex example and a visualisation of vectors and which angle I am trying to find. Also, by 'any axis', I mean that rotation matrix could contain rotations around a combination of individual rotations around X, Y and Z axes and the overall rotation is not happening around v but some arbitrary axis. Jun 29, 2021 at 22:21
• $v$ doesn’t seem to play any role here. It only is about $M$, am I right? Jun 30, 2021 at 6:58