« GT-730F(L)とphotoMate887 | トップページ | ホームページ更新 »

2010/03/07

角度の計算はややこしい

角度を数学では右側が0度で反時計回りに取りますが,方位は北が0度で時計回りです。それに,表し方として,0~360度(符号なし)と-180~180度(符号付き)もあります。その上,0と360,-180と180は同じですし,5度と355度とか,-175度と175度の差は350度とも言えますが,常識的には10度です。

また,フィギュアスケートでは3回転(トリプル)がスノーボードでは1080(テンエイティー)だったりしますが,360度を超える回転をしたとき540度とか720度と認識させる必要があります。

時刻もJSTで9時をまたぐとGPSはUTCなのでややこしいですが,.netでは日時をサポートしているので助かります。GPS時だと15秒進んでいるのでややこしいですが。。。

この問題は正規化されて不連続ななるために発生するので,角度の変化がデータ間隔より十分に遅いという前提で,読み込む際に,こんなのを追加しています。

if (p[i].p - p[i-1].p > 180) {
    offset -= 360;  // ex. 355 - 5 -> (-5) - 5
} else if (p[i].p - p[i-1].p < -180) {
    offset += 360;  // ex. 5 - 355 -> 5 - (-5)
}
p[i].offset = offset;

そして,p[i].p + p[i].offsetを使用する際の角度としています。直接p[i].pを書き換えるようにすると多回転になったときの処理が複雑になるのでやめました。

なお,三角関数を使用する場合は,データを読み込んだ時点でラジアンに変換し,出力時点で度に戻し,内部で混在させないようにしています。

|

« GT-730F(L)とphotoMate887 | トップページ | ホームページ更新 »

GPS」カテゴリの記事

プログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 角度の計算はややこしい:

« GT-730F(L)とphotoMate887 | トップページ | ホームページ更新 »