计算两个速度相加的结果

Calculating the result of adding two velocities

我有一个简单的二维系统,其中速度表示为速度(某个值)和方向(角度)。如果我有一个物体以给定速度 v 行进,当另一个速度 v2 作用于它时我想计算合成速度 v3.

我创建了以下插图来解释我希望实现的物理系统。速度和角度可能不完全正确,因为我还不知道如何计算它们——这是这个问题的症结所在——但它们是一个相当接近的指导方针。

当新速度v[=27时,是否有计算合成速度v3的优雅解决方案=]2 作用于以 v?

运动的物体

请注意,我对数学的理解非常有限,但对编程的理解很好。我正在用 TypeScript 编码,但 JavaScript 中的任何答案、伪代码或非常清晰的解释(没有充满神秘的数学符号)都是有帮助的。

最简单的解决方案是转换为笛卡尔坐标,在其中添加坐标,然后再转换回极坐标。

转换为笛卡尔坐标:

x = speed * cos(direction)
y = speed * sin(direction)

回到极地:

speed = sqrt(x * x + y * y)
direction = atan2(y, x)

用笛卡尔坐标存储速度可能是个更好的主意。

编辑:使用您的变量名称:v、v2、v3 和角度 a、a2、a3:

x = v * cos(a)
y = v * sin(a)

x2 = v2 * cos(a2)
y2 = v2 * sin(a2)

x3 = x + x2
y3 = y + y2

v3 = sqrt(x3 * x3 + y3 * y3)
a3 = atan2(y3, x3)

所以你有一个物体在 v1 方向飞行。 为了支持速度,您只需将它们添加到每个帧/模拟步骤的 v1

var v2;
while(simulation is running){
    v1 = v1 + v2;
}

您可以将 v1v2 表示为包含 xy.

分量的向量

为了转换你的值,你可以使用 x = speed * cos(direction)y = speed * sin(direction),正如 Rémi 所假设的那样。

您添加的内容将如下所示:

v1.x = v1.x + v2.x;
v1.y = v1.y + v2.y;

为了得到向量的角度,可以使用公式tan(angle) = y / x,得到

angle = atan(y/x)

根据JavaScript调用是var angle = atan2(v1.y, v1.x);.

矢量的长度(=物体的速度)可以用

计算
speed = sqrt(v1.x * v1.x + v1.y * v1.y)