3 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
我看到了问题-例如,如果您有一个45'角和315'角,则“自然”平均值将为180',但您想要的值实际上是0'。
我认为Starblue正在发展。只需计算每个角度的(x,y)笛卡尔坐标,然后将这些结果矢量相加即可。最终矢量的角度偏移应该是您所需的结果。
x = y = 0
foreach angle {
x += cos(angle)
y += sin(angle)
}
average_angle = atan2(y, x)
我现在暂时忽略指南针的航向是从北开始,然后顺时针旋转,而“常规”笛卡尔坐标沿X轴从零开始,然后逆时针旋转。无论如何,数学应该以相同的方式计算。
墨色风雨
TA贡献1853条经验 获得超6个赞
对于两个角度的特殊情况:
答案((a + b)mod 360)/ 2是错误的。对于角度350和2,最接近的点是356,而不是176。
单位向量和trig解可能太昂贵。
我从一点点修补中得到的是:
diff = ( ( a - b + 180 + 360 ) mod 360 ) - 180
angle = (360 + b + ( diff / 2 ) ) mod 360
0,180-> 90(对此有两个答案:该方程式采用a的顺时针答案)
180,0-> 270(请参见上文)
180,1-> 90.5
1,180-> 90.5
20、350-> 5
350、20-> 5(以下所有示例也可以正确反向)
10、20-> 15
350,2-> 356
359,0-> 359.5
180、180-> 180
添加回答
举报
0/150
提交
取消