计算圆形轨道的 xyz 速度矢量

计算科学 向量
2021-12-26 23:25:17

我正在尝试计算给定一组位置向量的圆形轨道的 xyz 速度向量,但我似乎无法正确计算。

获得速度大小的公式是引力常数的平方根乘以初级的质量除以初级到围绕它运行的物体的距离。我用太阳质量表示质量,用天文单位表示距离,用年表示时间。为简化起见,主要是我们的太阳,这意味着 G * M 等于 39.5。太阳的位置是 0, 0, 0,你看到的地球矢量是 au,是从 JPL Horizo​​ns 工具获得的。

这是代码:

    function getDistanceParams(p1, p2) {
      const dx = p2.x - p1.x;
      const dy = p2.y - p1.y;
      const dz = p2.z - p1.z;

      return { dx, dy, dz, dSquared: dx * dx + dy * dy + dz * dz };
    }

    function getCircularOrbit() {
      const dParams = getDistanceParams(
        { x: 0, y: 0, z: 0 },
        {
          x: 0.9197324105567349,
          y: -0.4147318273536994,
          z: -1.750037390352759e-5
        }
      );

      const vMag = Math.sqrt(39.5 / Math.sqrt(dParams.dSquared));

      return {vx: dParams.dx * vMag, vy: dParams.dy * vMag, vz: dParams.dz * vMag};
    }

    getCircularOrbit();

/*

The above outputs this:

{ vx: 5.754832301294686,
  vy: -2.59500707927136,
  vz: -0.00010950110691846996 }

The actual velocity vectors:

  vx: 2.4645428337894026,
  vy: 5.7097644117945805,
  vz: -3.3177815766459033e-4,

*/

我哪里错了???

更新:有效的代码

如果有人好奇,这是最终完成这项工作的代码:

export function getDistanceParams(p1, p2) {
  const dx = p2.x - p1.x;
  const dy = p2.y - p1.y;
  const dz = p2.z - p1.z;

  return { dx, dy, dz, dSquared: dx * dx + dy * dy + dz * dz };
}

export function getIdealCircularOrbit(primary, secondary, g) {
  const dParams = getDistanceParams(primary, secondary);

  const d = Math.sqrt(dParams.dSquared);

  const vMag = Math.sqrt(g * primary.m / d);

  return {
    x: secondary.x,
    y: secondary.y,
    z: secondary.z,
    vx: primary.vx + -dParams.dy * vMag / d,
    vy: primary.vy + dParams.dx * vMag / d,
    vz: primary.vz + dParams.dz * vMag / d
  };
}
1个回答

在您的代码中,您似乎在计算幅度引力公式中的速度(速度)乘以位置向量的分量。这里有两个错误。|v|r

  1. 您需要将速度乘以速度方向上的单位矢量,以获得速度矢量一般来说,位置向量不是单位向量(实际上在这种情况下,它非常接近,因为您选择了天文单位,但这只是运气)。v
  2. 位置向量指向径向,而速度向量(对于圆周运动)位于切线方向。rv

您实际上并没有向程序输入足够的信息来计算速度矢量的方向。您需要知道发生旋转的平面以及旋转的方向(顺时针或逆时针)。关键方程是 其中是角速度向量,是向量叉积。假设你知道单位向量 指向 的方向,你可以从上面的公式或者,您可以计算幅度

v=ω×r=ωn^×r
ω=ωn^×n^ωvω从速度和轨道半径,并 在上面的公式中直接n^

当然,如果您准备近似旋转完全在平面中(从您的数字来看,这并不完全正确,但非常接近),那么您知道并且可以轻松计算出方向来自 } 。xyn^vr