0
$\begingroup$

I'm trying to figure out how to rotate a vector towards a certain point in a 3D plane, but I can't seem to find a solution. Here's the problem.

From a given position $P(x_P,y_P,z_P)$, vector $\vec{f}$ originates, with $\vec{f}=\begin{pmatrix} x_f\\y_f\\z_f \end{pmatrix}$. Somewhere else in the plane is point $M(x_M,y_M,z_M)$. Now I'm trying to figure out how to, given an angle $\theta$, one could find a vector $\vec{f'}$ that's basically $\vec{f}$ rotated $\theta$ towards $M$.

$\endgroup$
0
$\begingroup$

The Axis of Rotation is the cross-product of the before and after vectors.

The Angle of Rotation is the $ cos^{-1}$ of the dot-product of normalized before and after vectors.

You may also try looking at the StackExchange Computer Graphics

$\endgroup$
0
$\begingroup$

Here is a simple, explicit way: Let $\vec{v} := M-P$ and then $\vec{g} := \vec{f}\times ( \vec{v} \times \vec{f} )$. Now $\vec{g}$ is orthogonal to $\vec{f}$ and lies in the plane spanned by $\vec{v}$ and $\vec{f}$. Now normalize $\vec g_0 = \frac{|\vec f|}{|\vec g|}\vec g$ to the length of $\vec f$. Then $f' = \cos(\theta) \vec f + \sin(\theta) \vec g_0$.

How do we know we have not rotated in the wrong direction? By a well kown vector identity, $\vec a\times(\vec b\times \vec c) = (\vec a\cdot \vec c)\vec b - (\vec a \cdot \vec b)\vec c$, thus $\vec{v}\cdot\vec{g} = |\vec{f}|^2 |\vec{v}|^2 - (\vec{f} \cdot \vec{v})^2$, which is non-negative by Cauchy's inequality, hence the angle between $\vec g$ and $\vec v$ is acute. This means that $\vec v$ and $\vec g$ lie in the same half-plane with respect to $\vec f$.

$\endgroup$
  • $\begingroup$ Thanks for the answer! One of my colleagues advised me to look into the Rodrigues’ rotation formula, which would result in (with $\vec{k} = \frac{\vec{g_0}}{||\vec{g_0}||}$): $\vec{f'} = \vec{f} \cos{(\theta)} + (\vec{k} \times \vec{f}) \sin{(\theta)} + \vec{k}(\vec{k} \cdot \vec{f})(1-\cos{(\theta)})$, which is way longer (and seems way less elegant) than your solution. However, how could you explain the equality between his and your solution? In other words, can you explain what you're doing the last step? $\endgroup$ – SuperSjoerdie Jun 10 '19 at 10:18
  • $\begingroup$ @SuperSjoerdie In Rodrigues' formula, $\vec k$ is a given rotation axis, around which $\vec f$ is rotated. Since we want to rotate $\vec f$ towards $\vec v = M-P$, it only makes sense to rotate in the plane spanned by $\vec f$ and $\vec v$, thus $\vec k$ is a unit normal vector of this plane, i.e. $\vec f \times \vec v/|\vec f \times \vec v|$. The last term in the formula drops out, since $\vec k \cdot \vec f = 0$, in our case, and $\vec g_0 = \vec k \times \vec f$. $\endgroup$ – Josef E. Greilhuber Jun 10 '19 at 14:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.