平均角度

时间:2011-03-17 18:36:32

标签: .net

我在这里看了一些解决方案,但没有提供我需要的东西,所以:

我需要平均一个角度数组(0到359.9,没有负数) (A1 + A2 + A3 + An)/ n

问题是当你得到一个数组{1,359,2,358}时,如果使用上面的公式,平均值是180,但实际上它应该是0。

有什么想法吗?

4 个答案:

答案 0 :(得分:16)

添加每个角度的单位矢量,并将结果矢量转换回角度。如果结果向量的长度为零,则输入相互抵消,结果不确定。

单位矢量的长度为1,其x和y长度由角度的余弦和正弦给出。因此,您可以按照以下伪代码对示例进行平均:

x = cos(radians(1)) + cos(radians(359)) + cos(radians(2)) + cos(radians(358));
y = sin(radians(1)) + sin(radians(359)) + sin(radians(2)) + sin(radians(358));
angle = degrees(atan2(y, x));

答案 1 :(得分:0)

离开圆的光线可以用多种方式表示。它可能是0度,360度,720度等。您需要确定适合您的正确可接受的答案,并在呈现之前隐瞒最终答案的中间答案。

1 + 359 + 2 + 358 = 360 + 360 = 720 degrees in total
720 / 4 = 360 / 2 = 180 degrees on average

答案不应该是零,而是359度不等于-1度,因为角度围绕圆圈“反过来”。

答案 2 :(得分:0)

你想要完成它,即0应该在359度之后吗?

用360获得结果的模数。

avg = ( (a1 + a2 + an) /n ) % 360

答案 3 :(得分:0)

平均度比听起来有点棘手。 前几天我必须在工作中这样做,并希望分享我的发现。

  1. 为您的任何值添加360不应更改平均值 例如平均(2 4 18)=平均(362,4,18)= 8
  2. 将所有值移动一个恒定值应该平均移动平均值 例如平均(2-3,4-3,18-3)=平均(359,1,15)= 8-3
  3. 如果您的学位“取消”,例如0,120,240,平均值未定义
    (即有几个同样好的答案) 除了给出错误信息外,我认为没办法解决这个问题。
  4. 陷入几个陷阱之后,我最终得出以下定义: 平均值是使方差最小化的值。

    一旦给出平均值,方差可以通过以下公式计算:

    1. 将所有值移动相同的角度,使得平均值为180 (这相当于在平均值的另一侧“切割”圆圈。)
    2. 将所有角度标准化为0到360之间。
    3. 计算正常平均值。
    4. 将平均值移回之前移动值的角度(反转步骤1)。
    5. 这需要O(n ^ 2)时间。

      但是,如果所有值都在180度的范围内,则可以移动值,使得0包含在最大值间隙中,然后计算正常平均值。 这需要花费O(n)时间。