Caméra, rotation: problème acos()
Bonjour!
J'essaie d'écrire une caméra, mais j'ai un problème pour effectuer une rotation.
J'aimerais une rotation qui:
-vise toujours le point (0,0,0)
-reste à la même distance du point (0,0,0)
-voyage sur le cercle du plan définit par l'axe y et la position de la caméra
Je l'est écrite, elle marche, mais elle refuse de faire un tour complet.
Le problème vient certainement de l'acos(...)(ou peut-être de atan2(...)).
C'est un problème de trigo mais je me suis perdue... à l'aide!
Voici ma fonction:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
void Camera::rotationvert(int sens)
{
double theta(0), phi(0), r(0);
r = sqrt((xpos*xpos) + (ypos*ypos) + (zpos*zpos));
phi = acos(ypos/r);
theta = atan2(xpos,zpos);
phi += sens*angle;
zpos = r*sin(phi)*cos(theta);
xpos = r*sin(phi)*sin(theta);
ypos = r*cos(phi);
} |
(angle=0.05 et sens=1 ou -1)