2010-11-17 121 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