2
$\begingroup$

I have a 3D point that is rotated about the $x$-axis and after that about the $y$-axis. I know the result of this transformation. Is there an analytical way to compute the rotation angles?

$$ v'=R_y(\beta)*R_x(\alpha)*v $$ Here, $v$ and $v'$ are known and I want to compute $\alpha$ and $\beta$. $R_x$ and $R_y$ are the rotation matrices about the x and y axis respectively. The overall matrix will then be:

$$ R=\begin{pmatrix} \cos \beta & \sin\alpha * \sin\beta & \cos\alpha * \sin\beta \\ 0 & \cos \alpha & -\sin\alpha \\ -\sin\beta & \cos\beta * \sin\alpha & \cos\alpha * \cos\beta \end{pmatrix} $$

  • 1
    You can use law of cosines. Say $v=(x,y,z)$ and $R_x(\alpha)v=(x,y^\prime,z^\prime)$. Draw the triangle with vertices $A=(x,y,z)$, $B=(x,y^\prime,z^\prime)$, and $C=(x,0,0)$. Then $\angle C$ is $\alpha$. You can do the same process for $\beta$.2012-11-12
  • 0
    Correct me if I am wrong, but this cannot work because the second rotation (about the y axis) will change the z-coordinate. Therefore, the angle you described is not the correct one.2012-11-12
  • 1
    True, but all you need to get the first angle is the final $y$ coordinate. The intermediate $z$ coordinate $z^\prime$ just helps establish $\alpha$. Your second triangle would have vertices $(x,y^\prime,z^\prime)$ (the location after the $x$ rotation), $(0,y^\prime,0)$, and $(x^\prime,y^\prime,z^{\prime\prime})$. This last coordinate is the final location of your point.2012-11-12
  • 0
    Yes, but how do I apply law of cosines, if I don't know the intermediate position?2012-11-12
  • 1
    You know the distance to the $x$-axis though, and the $x$ rotation doesn't change this distance. I.e. $r=\sqrt{z^2+y^2}=\sqrt{y^{\prime^2}+z^{\prime^2}}$. You can get $z^\prime$ from this, up to a sign (the sign doesn't matter - the problem doesn't have a unique solution anyway).2012-11-12
  • 0
    Great, I got it. Thanks.2012-11-12

1 Answers 1

2

Rotation about the $y$ axis won't change the $y$ coordinate anymore, so the first rotation has to get that coordinate right straight away. There are in general two angles that do the job, but there might be none, namely if $\sqrt{v_y^2+v_z^2}<|v'_y|$. If there are such angles, then for each there will be a unique rotation about the $y$ axis that gets the vector to the destination $v'$, provided we had $|v|=|v'|$ to begin with, which is of course a necessary condition to succeed with any number of rotations fixing the origin. You can easily write down the required angles using inverse trigonometric functions.

  • 0
    I also thought about beginning with the y-coordinate. But I am somehow stuck at solving $v'_y=cos\alpha*v_y-sin\alpha*v_z$.2012-11-12
  • 1
    @NicoSchertler Put $v_y+v_z\mathbf i=r\exp(\beta\mathbf i)$ with $r,\beta\in\mathbf R$, then you want $v'_y=\operatorname{Re}(\exp(\alpha\mathbf i)(v_y+v_z\mathbf i))$ which gives $\frac{v'_y}r=\cos(\alpha+\beta)$, and this is solved by $\alpha=\pm\arccos(\frac{v'_y}r)-\beta$.2012-11-13