环绕的两个角度的平均值
可能的重复:
如何计算一组的平均值循环数据?
我有两个角度,a=20 度和 b=350 度。 这两个角度的平均值是 185 度。 然而,如果我们考虑最大角度为 360 度并允许环绕,则可以看到 5 度是更接近的平均值。
在计算平均值时,我很难想出一个好的公式来处理这种情况。 有人有任何提示吗?
还是我在这里搬起石头砸自己的脚? 这在数学中被认为是“不好的做法”吗?
Possible Duplicate:
How do you calculate the average of a set of circular data?
I have two angles, a=20 degrees and b=350 degrees. The average of those two angles are 185 degrees. However, if we consider that the maximum angle is 360 degrees and allows for wrap around, one could see that 5 degrees is a closer average.
I'm having troubles coming up with a good formula to handle that wrap around when calculating average. Anyone got any hints?
Or am I shooting myself in the foot here? Is this considered "bad practice" in math?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
只需取正常平均值,然后取模 180。在您的示例中,这给出了 5 度,正如预期的那样。
Just take a normal average and then take it mod 180. In your example this gives 5 degrees, as expected.
试试这个(C# 中的示例):
我认为它有效,输出是
Try this (example in C#):
I think it works, the output is
如果你看一下角圈,你会发现有 2 个相对的“角度”对应于你的“平均值”。
所以185°和5°都是正确的。
但您提到了更接近的平均值。 所以在这种情况下,你可以选择更近的角度。
通常,角度的“平均值”涉及逆时针方向。 如果你交换两个角度(或者如果你使用顺时针方向),“平均值”是不一样的。
例如,对于
a=20°
和b=350°
,您要查找a
之后和之前的角度b
逆时针方向,185°
就是答案。 如果您正在寻找逆时针方向位于a
之前和b
之后的角度(或在a
之后和b< /code> 逆时针方向),
5°
就是答案。这篇文章的答案是正确的做法。
所以解决方案的伪代码是
if you have a look at the angular circle, you will see that there are 2 opposite "angles" that corresponds to your "average".
So both 185° and 5° are correct.
But you mentionned the closer average. So in that case, you may choose the angle that is closer.
Usually, the "average" of angles concerns the counterclockwise direction. The "average" is not the same if you switch your two angles (or if you use the clockwise direction).
For example, with
a=20°
andb=350°
, you are looking for the angle that comes aftera
and beforeb
in the counterclockwise direction,185°
is the answer. If you are looking for the angle that comes beforea
and afterb
in the counterclockwise direction (or aftera
and beforeb
in the counterclock wise direction),5°
is the answer.The answer of this post is the right way to do.
So the pseudo-code for the solution is