我想计算一组角度的平均值,该角度 代表源方位角(0到360度)-(类似于风向)
我知道它已经被讨论过(几次)。公认的答案是 从各个角度计算单位矢量,并取其平均值的角度 。
但是,此答案以非直观的方式定义了平均值。0、0和90的平均值将是 atan((sin(0)+ sin(0)+ sin(90))/(cos(0)+ cos(0)+ cos(90)))= atan(1 / 2)= 26.56度
我希望0、0和90的平均值为30度。
因此,我认为再次提出这个问题是很公平的:您将如何计算平均值,因此此类示例将给出直观的预期答案。
编辑2014:
提出这个问题后,我在CodeProject上发表了一篇文章,提供了详尽的分析。本文研究了以下参考问题:
谢谢大家帮助我更清楚地了解我的问题。
我找到了想要的东西。这称为三 田法 。
输入和输出在[0..360)范围内。
该方法适用于平均使用恒定采样间隔采样的数据。
该方法假定连续采样之间的差异小于180度(这意味着如果我们采样速度不够快,则采样信号的330度变化将被错误地检测为另一个方向的30度变化,并且在计算中插入错误)。 奈奎斯特-香农采样定理有人吗?
这是一个c ++代码:
double AngAvrg(const vector<double>& Ang) { vector<double>::const_iterator iter= Ang.begin(); double fD = *iter; double fSigD= *iter; while (++iter != Ang.end()) { double fDelta= *iter - fD; if (fDelta < -180.) fD+= fDelta + 360.; else if (fDelta > 180.) fD+= fDelta - 360.; else fD+= fDelta ; fSigD+= fD; } double fAvrg= fSigD / Ang.size(); if (fAvrg >= 360.) return fAvrg -360.; if (fAvrg < 0. ) return fAvrg +360.; return fAvrg ; }
在第51页的http://www.epa.gov/scram001/guidance/met/mmgrma.pdf上对此进行了说明。
感谢MaR将链接发送为评论。
如果采样数据恒定,但是我们的采样设备的Von Mises分布不准确,则单位矢量计算将是适当的。