我有一组角度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.
有没有人可以使用这些特殊情况的方法?或者想要解决它?
由于
答案 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>