如何找到一组轴承的平均值

时间:2011-03-04 03:15:00

标签: math geospatial average bearing

  

可能重复:
  How do you calculate the average of a set of angles?

如果我有一套1-360的轴承,我怎样才能找到平均值?通常要找到平均值,将它们全部加起来并除以项目数。这里的问题是,在[1,359],2个轴承的情况下这样做会导致180,实际上应该是360.任何想法?

3 个答案:

答案 0 :(得分:7)

将角度表示为Norm = 1的向量并对总和求平均值。

x1 = {cos(a),sin(a)}

x2 = {cos(b),sin(b)} 

(x1+x2)/2 = {(cos(a)+cos(b))/2,(sin(a)+sin(b))/2} 

表示平均值的角度为

atan2((sin(a)+sin(b)) /(cos(a)+cos(b)))  

当分母接近于零时,请注意控制可能的溢出。

enter image description here

答案 1 :(得分:1)

从你的问题中不清楚你在试图定义“平均值”是什么......对于圆圈上的方向,没有明确的平均概念。

一种解释是值x,它是最接近所提供值的集合,在最小二乘意义上,两个轴承之间的距离定义为它们之间的最小角度。以下是计算此平均值的代码:

In[2]:= CircDist[a_, b_] := 180 - Mod[180 + a - b, 360]

In[6]:= Average[bearings_] := 
 x /. NMinimize[
    Sum[CircDist[x, bearings[[i]]]^2, {i, 1, Length[bearings]}], 
    x][[2]]

In[10]:= Average[{1, 359}]

Out[10]= -3.61294*10^-15

答案 2 :(得分:0)

所以你想要的是两个轴承的中间 - 如果你有{90,270}会发生什么?期望的答案是0还是180?这是需要考虑的事情..还有三个轴承的中间是什么?

你可以做的一件事是:

  • 取出套装中的前两个轴承
  • 计算两个方向之间的差异(即[1,359]在一个方向上给出2度,在另一个方向上给出358)
  • 如果你想让所需的角度成为两者中最敏锐的中间角度,那就把它作为你的差异并加上逆时针的大部分(即359)
  • 将此作为新轴承,将下一个轴承(即第3组)用作另一个轴承,并重复,直到所有轴承都“中等”。

在我的头脑中,我不认为这是公平的,但它可能会在一个方向上偏向它(即可能偏好你集合中的后期值)。