计算两个速度相加的结果
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;
}
您可以将 v1
、v2
表示为包含 x
和 y
.
分量的向量
为了转换你的值,你可以使用 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)
我有一个简单的二维系统,其中速度表示为速度(某个值)和方向(角度)。如果我有一个物体以给定速度 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;
}
您可以将 v1
、v2
表示为包含 x
和 y
.
为了转换你的值,你可以使用 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)