[kaze's test] プログラミングメモ →目次

複数の角度を平均する(アルゴリズム)

例えばπ度と-π度を単純に平均すると、0度になってしまい、正しい平均値が得られません。角度α1と角度α2を単位円上にある二つの点(P1,P2)の角度とすれば、二つの点(P1,P2)の位置{(x1,y1), (x2,y2)}を平均して平均点(Pa)の座標(xa,ya)を得られます。平均点(Pa)の角度を逆正接関数で算出して、それを角度α1と角度α2の平均値と見なすことができます。
P1のX座標x1はcos(α1);
P1のY座標y1はsin(α1);
P2のX座標x2はcos(α2);
P2のY座標y2はsin(α2);
PaのX座標xaは(x1+x2)/2;
PaのY座標yaは(y1+y2)/2;
Paの角度はatan2(ya,xa);
以上は2つの角度の平均の方法ですが、3つ以上の角度でも同じ方法で求めらます。

error

下記は二つの角度の平均を求める関数です。

double MeanTwoAngles(double alpha1, double alpha2)
{
    double x1 = cos(alpha1);
    double y1 = sin(alpha1);
    double x2 = cos(alpha2);
    double y2 = sin(alpha2);
    xa = (x1 + x2) / 2;
    ya = (y1 + y2) / 2;
    return atan2(ya, xa);
}