Math 利用三维三角法计算距离

Math 利用三维三角法计算距离,math,3d,trigonometry,Math,3d,Trigonometry,我有点糊涂——我不知道什么应该是一个相当小的触发问题 给定笛卡尔坐标(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 += dist

我有点糊涂——我不知道什么应该是一个相当小的触发问题

给定笛卡尔坐标(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应用程序的,但我只需要一些伪代码来帮助我


谢谢你陈述问题的方式,看来“方向余弦”最有意义

假设
x_角
是目标方向和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;

如何测量X、Y和Z角?它们相对于什么?呃,以度为单位测量,相对于各自的轴。这就是你的意思吗?也许我应该更清楚一点,称为x_方向变量x_角度等。因此,行驶的距离肯定会大于无定向距离。例如:取距离=2,x_角=10,y_角=20,z_角=60,然后sqrt(δx^2+δy^2+δz^2)=2.90…>2@foodwagon:三个角度只有两个自由度:它们必须遵守dc_x^2+dc_y^2+dc_z^2=1的约束。因此(x_角,y_角,z_角)=(10度,20度,30度)不是一组有效的方向角。尝试一些满足约束条件的角度,你会发现它是有效的。“两个自由度”-这是我无法理解的。我想我知道了,干杯!OP现在似乎理解了这个问题,我怀疑它的初衷是让x_a,y_a和z_a成为欧拉角,而不是方向余弦。在这种情况下,需要一个不同的方程式(DCM乘法mayb?)。此外,如果我的假设是正确的,那么z_角实际上是多余的,因为正如您在评论中提到的,只有两个自由度可用。