我需要在给定多个2D速度(速度和方向)的情况下找到平均值 编辑: 总 2D速度。几个例子:
示例1
速度1是90°,速度为10像素或每秒单位
速度2为270°,速度为5像素或每秒单位。
平均速度为90°,5像素或每秒单位。
示例2
速度1为0°,速度为10像素或每秒单位
速度2是180°,速度为10像素或每秒单位
速度3以8像素或每秒单位的速度为90°
平均速度为90°,8像素或每秒单位
示例3
速度1为0°,10像素或每秒单位
速度2在10像素或每秒单位时为90°
平均速度为45°,14.142像素或每秒单位
我使用的是JavaScript,但它主要是一个与语言无关的问题,如果需要,我可以将其转换为JavaScript。
答案 0 :(得分:1)
如果你要使用一堆角度,我只计算每个速度,
vx = v * cos(theta), vy = v * sin(theta)
然后将x速度和y速度分别作为矢量分量求和,除以速度总数,
sum(vx)/ total v,sum(vy)/ total v
然后最终用最终的vx和vy计算最终的速度和方向。速度的大小可以通过毕达哥拉斯定理的简单应用找到,然后最终角度应该是tan-1(y / x)。
每个例子#3
vx = 10 * cos(90)+ 10 * cos(0)= 10, vy = 10 * sin(90)+ 10 * sin(0)= 10
因此,tan-1(10/10)= tan-1(1)= 45
然后最终幅度为sqrt(10 ^ 2 + 10 ^ 2)= 14.142
答案 1 :(得分:1)
这些是向量,您应该使用向量添加来添加它们。所以正确和向上是正面的,而左和右是负面的。 添加从左到右的向量(x轴)。
实施例1 = -10 + 5 = -5
示例2 = -8 = -8
示例3 = 10 = 10.(90度通常是向右90度)
同样地添加你的起伏,你得到这些速度,左边的左边到右边的括号,你的右上角。 (-5,0)
( - 8,0)
(10,10)
这些向量包含绘制对象运动所需的所有信息,您无需计算角度来绘制对象的运动。如果由于某种原因你宁愿使用速度(类似于速度,但不同)和角度,那么你必须首先计算上面的矢量,然后使用毕达哥拉斯定理找到速度和简单的三角学来获得角度。像这样:
var speed = Math.sqrt(x * x + y * y);
var tangeant = y / x;
var angleRadians = Math.atan(tangeant);
var angleDegrees = angleRadians * (180 / Math.PI);
我会警告你,你应该和知道三角学的人交谈并测试一下。这样的工作可能存在误导性的错误。
答案 2 :(得分:0)
要获得平均值: 添加每个速度,然后除以速度数。
10mph + 20mph / 2 = 15
12mph + 14mph + 13mph + 16mph / 4 = 14 (13,75)
答案 3 :(得分:0)
从您的示例中,您似乎想要添加二维向量,而不是平均值。
E.g。示例2可以表示为
(0,10)+(0,-10)+( - 8,0)=( - 8,0)
然后速度等于矢量的长度:
SQRT(X ^ 2 + Y ^ 2)
答案 4 :(得分:0)
这不是平均值,因为它只是基本的矢量添加。你找到了多个“像素矢量”并将它们加在一起。如果你有一个向右2像素的速度向量,1向上,你将它添加到左边3像素和左下3像素的速度矢量,你将得到一个左边1像素的速度矢量,1下来的速度矢量。
因此速度由
定义pij =像素上升或( - )下降
pii =右边的像素或( - )左边的
speedi = pii1 + pii2 = 2-3 = -1(剩下1个像素)
speedj = pij1 + pij2 = 1-2 = -1(向下1个像素)
从那里,您需要确定哪些方向是正面的,哪些是负面的。我建议左边是负数,下面是负数(如数学图表)。
矢量的角度是arctan(speedj / speedi)
arctan(-1 / -1)= 45度