可能重复:
您是如何计算一组角度的平均值?
我有两个角,α= 20度且b = 350度。 这两个角度的平均值是185度。 然而,如果我们考虑到的最大角度为360度,并允许回绕,人们可以看到5度是更接近平均水平。
我有麻烦来了一个良好的公式来处理周围包裹的是平均计算时。 任何人有什么提示吗?
还是我自己的拍摄在这里的脚? 这被认为是“不好的做法”,在数学?
可能重复:
您是如何计算一组角度的平均值?
我有两个角,α= 20度且b = 350度。 这两个角度的平均值是185度。 然而,如果我们考虑到的最大角度为360度,并允许回绕,人们可以看到5度是更接近平均水平。
我有麻烦来了一个良好的公式来处理周围包裹的是平均计算时。 任何人有什么提示吗?
还是我自己的拍摄在这里的脚? 这被认为是“不好的做法”,在数学?
试试这个(在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
就拿中的正常平均,然后把它MOD 180在您的例子这给了5度,符合市场预期。
如果你看看角一圈,你会看到有2个相反的“角度”对应于您的“平均”。
因此,无论185°和5°是正确的。
但是你mentionned 越接近平均水平 。 因此,在这种情况下,您可以选择更接近角度。
通常,角度“平均”涉及逆时针方向。 “平均”是不一样的,如果您打开两个角度(或者,如果你使用的顺时针方向)。
例如,对于a=20°
和b=350°
,你正在寻找后到来的角度a
和前b
在逆时针方向上 , 185°
是答案。 如果你正在寻找之前时的角度a
和后b
在逆时针方向上(或后a
和前b
在counterclock方向上), 5°
就是答案。
的回答这个职位是做正确的方式。
因此,对于解决方案的伪代码
if (a+180)mod 360 == b then
return (a+b)/2 mod 360 and ((a+b)/2 mod 360) + 180 (they are both the solution, so you may choose one depending if you prefer counterclockwise or clockwise direction)
else
return arctan( (sin(a)+sin(b)) / (cos(a)+cos(b) )