3 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
我看到了問(wèn)題-例如,如果您有一個(gè)45'角和315'角,則“自然”平均值將為180',但您想要的值實(shí)際上是0'。
我認(rèn)為Starblue正在發(fā)展。只需計(jì)算每個(gè)角度的(x,y)笛卡爾坐標(biāo),然后將這些結(jié)果矢量相加即可。最終矢量的角度偏移應(yīng)該是您所需的結(jié)果。
x = y = 0
foreach angle {
x += cos(angle)
y += sin(angle)
}
average_angle = atan2(y, x)
我現(xiàn)在暫時(shí)忽略指南針的航向是從北開(kāi)始,然后順時(shí)針旋轉(zhuǎn),而“常規(guī)”笛卡爾坐標(biāo)沿X軸從零開(kāi)始,然后逆時(shí)針旋轉(zhuǎn)。無(wú)論如何,數(shù)學(xué)應(yīng)該以相同的方式計(jì)算。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
對(duì)于兩個(gè)角度的特殊情況:
答案((a + b)mod 360)/ 2是錯(cuò)誤的。對(duì)于角度350和2,最接近的點(diǎn)是356,而不是176。
單位向量和trig解可能太昂貴。
我從一點(diǎn)點(diǎn)修補(bǔ)中得到的是:
diff = ( ( a - b + 180 + 360 ) mod 360 ) - 180
angle = (360 + b + ( diff / 2 ) ) mod 360
0,180-> 90(對(duì)此有兩個(gè)答案:該方程式采用a的順時(shí)針答案)
180,0-> 270(請(qǐng)參見(jiàn)上文)
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
添加回答
舉報(bào)