2010-11-17 3 views
3

Je suis très faible - je n'arrive pas à comprendre ce qui devrait probablement être un problème de trig relativement trivial. Étant donné les coordonnées cartésiennes (x, y, z), je voudrais déterminer une nouvelle coordonnée en fonction d'une direction (angles x, y et z) et d'une distance à parcourir.Calculer la distance à l'aide de la trigonométrie en 3D

class Cartesian() { 
    int x = 0; 
    int y = 0; 
    int z = 0; 
    int move (int distance, int x_angle, int y_angle, int z_angle) { 
    x += distance * //some trig here 
    y += distance * //some trig here 
    z += distance * //some trig here 
    } 
} 

Ie, je veux passer à une distance donnée de l'origine dans une direction donnée, et besoin des coordonnées de la nouvelle position.

Ceci est en fait pour une application JavaScript, mais j'ai juste besoin d'un peu de psuedocode pour m'aider.

Merci

+2

Comment mesurez-vous votre X, Y et Z angles? De quoi sont-ils relatifs? –

+0

Erm, mesurant en degrés, par rapport à leurs axes respectifs. C'est ce que tu veux dire? Peut-être aurais-je dû être plus clair et appeler la variable x_direction x_angle etc. – FlamingTempura

Répondre

2

La façon dont vous avez dit le problème, il semble que « la direction » font cosinus le plus de sens.

Si l'on suppose x_angle est l'angle en radians entre la direction cible et le X axe, etc .:

dc_x = cos(x_angle); 
dc_y = cos(y_angle); 
dc_z = cos(z_angle); 

delta_x = dc_x * distance; 
delta_y = dc_y * distance; 
delta_z = dc_z * distance; 

x += delta_x; 
y += delta_y; 
z += delta_z; 
+0

La distance parcourue serait donc certainement supérieure à celle induite. Ex: Prendre distance = 2, x_angle = 10, y_angle = 20, z_angle = 60, puis sqrt (delta_x^2 + delta_y^2 + delta_z^2) = 2,90 ...> 2 – FlamingTempura

+1

@foodwagon: Il n'y a que deux degrés de liberté pour vos trois angles: ils doivent obéir à la contrainte que dc_x^2 + dc_y^2 + dc_z^2 = 1. Ainsi (x_angle, y_angle, z_angle) = (10 deg, 20 deg, 30 deg) n'est pas valide ensemble d'angles de direction. Essayez quelques angles qui satisfont cette contrainte, et vous verrez que cela fonctionne. –

+0

"deux degrés de liberté" - c'est ce que je ne pouvais pas comprendre. Pensez que je l'ai savoir, applaudissements! – FlamingTempura

Questions connexes