Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

This may be a really basic question but the typical atan2 method isn't working when I write it in a program.

I need a camera object to face a certain target in 3D space.
I need to calculate the 3 Euler angles (yaw, pitch, roll) for the camera.

alt text

How can I do this?

share|improve this question
1  
The solution will not be unique since you can always rotate the camera on its axis and still have it pointing at a target. Like choosing portrait vs. landscape in a real camera. –  Jyotirmoy Bhattacharya Oct 13 '10 at 23:36
    
You're right, but at least the X and Y can be calculated to face the point, if not a proper Z (roll). –  Jarvis Oct 14 '10 at 5:06
    
Can you explain exactly how your use of two-argument arctangent is failing? It seems to me that any correction to your algorithm would involve the addition or subtraction of some multiple of $\pi/2$. –  J. M. Oct 20 '10 at 11:07
add comment

1 Answer

up vote 1 down vote accepted

From looking at your diagram, it appears to me that the transformation takes the unit vector $(i_x,i_y,i_z)$ and rotates it to point to $(f_x,f_y,f_z)$:
$$\begin{pmatrix}c_\Psi&s_\Psi&0\\-s_\Psi&c_\Psi&0\\0&0&1\end{pmatrix} \begin{pmatrix}1&0&0\\0&c_\theta&-s_\theta\\0&s_\theta&c_\theta\end{pmatrix} \begin{pmatrix}c_\phi&-s_\phi&0\\s_\phi&c_\phi&0\\0&0&1\end{pmatrix} \begin{pmatrix}i_x\\i_y\\i_z\end{pmatrix} = \begin{pmatrix}f_x\\f_y\\f_z\end{pmatrix} $$
where $c_\phi = \cos(\phi), s_\phi = \sin(\phi)$, etc.

It isn't hard to solve for $\phi,\theta$ and $\Psi$ if you assume that your camera begins by pointing in a convenient direction such as $(i_x,i_y,i_z) = (0,0,1)$.

share|improve this answer
    
Uh, I should add that when writing these things out, I normally have (a) wrong signs and (b) wrong orders of matrix multiplication. –  Carl Brannen Mar 23 '11 at 0:27
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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