计算添加两个速度的结果

时间:2015-01-25 12:03:13

标签: typescript

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

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

当新的速度 v 2 行为时,是否有优雅的解决方案来计算合成速度 v 3 v 旅行的物体上?

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

2 个答案:

答案 0 :(得分:4)

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

转换为笛卡儿:

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)

答案 1 :(得分:1)

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

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

您可以将v1v2表示为包含xy组件的向量。

为了转换您的值,您可以使用Rémi所设想的x = speed * cos(direction)y = speed * sin(direction)

您的添加内容如下:

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)