平均角度计算

时间:2017-09-17 15:59:26

标签: java math mean angle

我有一组角度A,每个A在A = [0,360]。 现在我想计算平均角度A.

我在rosettacode.org找到了解决方案:

onDestroy()

但是有一些不受欢迎的解决方案。

  

平均角度[350.0,10.0]为-1.614809932057922E-15 //好

     

[0.0,180.0]的平均角度为90.0 //良好

     

[0.0,180.0,180.0]的平均角度为180.0 //差

     

平均角度[0.0,0.0,180.0]为7.016709298534877E-15 //差

     

[0.0,0.0,180.0,180.0]的平均角度为90.0 //良好

在我看来,[0.0,180.0,180.0]的平均角度应该是120,而[0.0,0.0,180.0]应该是60.

有没有人可以使用这些特殊情况的方法?或者想要解决它?

由于

1 个答案:

答案 0 :(得分:0)

一种方法是修改迭代方法以找到方​​法,即在C:

Mean = 0.0
Count = 0;
for ( i=0; i<N; ++i)
{  count += 1;
   diff = X[i]-mean;
   Mean = Mean + diff/count;
}

使用适合角度的差异和求和操作。在C中,以度为单位的角度,这是数学库中的余数函数:

Mean = 0.0
Count = 0;
for ( i=0; i<N; ++i)
{  count += 1;
   diff = remainder(X[i]-Mean, 360.0);
   Mean = remainder( Mean + diff/count, 360.0);
}

请注意,此处的remainder()与模数(fmod)不同。来自&#39; man remaining&#39;

remainder()函数计算x除以y的余数。返回值是x-n y,其中n是值x / y,四舍五入到最接近的整数。如果x-n y的绝对值为0.5,则选择n为偶数。

注意关于&#39;四舍五入到最接近的整数&#39;。所以我们有,例如,

remainder( 30.0 - 10.0, 360.0) = 20
remainder( 350.0 - 10.0, 360.0) = -20

等等。       如果你的语言没有提供这样的功能,你需要自己实现它,我很遗憾地说我不懂Java,所以我对此的建议毫无用处。 / p>