我有两个角度,a = 20度,b = 350度。这两个角度的平均值是185度。但是,如果我们认为最大角度是360度并且允许环绕,则可以看到5度是更接近的平均值。
在计算平均值时,我遇到了一个很好的公式来解决这个问题。有人有任何提示吗?
还是我在这里拍脚?这被认为是数学中的“坏习惯”吗?
答案 0 :(得分:2)
试试这个(C#中的例子):
static void Main(string[] args)
{
Console.WriteLine(GetAngleAverage(0,0));
Console.WriteLine(GetAngleAverage(269, 271));
Console.WriteLine(GetAngleAverage(350, 20));
Console.WriteLine(GetAngleAverage(361, 361));
}
static int GetAngleAverage(int a, int b)
{
a = a % 360;
b = b % 360;
int sum = a + b;
if (sum > 360 && sum < 540)
{
sum = sum % 180;
}
return sum / 2;
}
我认为它有效,输出是
0
270
5
1
答案 1 :(得分:1)
只需取正常平均值,然后取mod 180.在你的例子中,这就像预期的那样得到5度。
答案 2 :(得分:1)
如果您查看角度圆圈,您会看到有2个相对的“角度”与您的“平均值”相对应。
因此185°和5°都是正确的。
但是你提到了更接近平均值。因此,在这种情况下,您可以选择更接近的角度。
通常,角度的“平均”涉及逆时针方向。如果切换两个角度(或顺时针方向),“平均”不一样。
例如,对于a=20°
和b=350°
,您正在寻找a
之后和b
之前逆时针方向的角度,185°
就是答案。如果您正在寻找a
之前和b
之后逆时针方向(或a
之后和b
之前的逆时针方向)的角度,{{ 1}}就是答案。
this post的答案是正确的方法。
所以解决方案的伪代码是
5°