2010-11-17 289 views
3

我很朦朧 - 我找不出什麼應該是一個相當微不足道的問題。給定笛卡爾座標(x,y,z),我想確定一個給定方向(x,y和z角度)的新座標和一個行程距離。在三維中使用三角函數計算距離

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 
    } 
} 

即,我想在給定方向上從原點移動給定距離,並且需要新位置的座標。

這實際上是一個JavaScript應用程序,但我只是需要一些psuedocode來幫助我。

感謝

+2

您如何測量你的X,Y,和Z的角度?它們是什麼關係? – 2010-11-17 22:00:43

+0

Erm,相對於它們各自的軸以度爲單位進行測量。你是這個意思嗎? 也許我應該已經更清楚了,並稱爲x_direction變量x_angle等 – FlamingTempura 2010-11-17 22:07:13

回答

2

你指出問題的方法,似乎「方向餘弦」最有意義。

假設x_angle在目標方向和X軸 之間的弧度的角度等:

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

因此,行駛的距離肯定會大於浸入的距離。例如:取距離= 2,x_angle = 10,y_angle = 20,z_angle = 60,然後sqrt(delta_x^2 + delta_y^2 + delta_z^2)= 2.90 ...> 2 – FlamingTempura 2010-11-17 22:30:09

+1

@foodwagon:的自由度:它們必須服從dc_x^2 + dc_y^2 + dc_z^2 = 1的約束。所以(x_angle,y_angle,z_angle)=(10度,20度,30度)不是有效的一組方向角。嘗試一些滿足該限制的角度,然後你會看到它的工作原理。 – 2010-11-17 22:36:31

+0

「兩個自由度」 - 這是我無法理解的。想想我知道了,歡呼! – FlamingTempura 2010-11-17 22:38:56