
測定タイムの精度向上として、
通過判定時の走行軌跡の始点と終点、そして計測ラインの始点と終点の交点を求め、
始点と交点、終点と交点の距離の比率で
走行軌跡の始点時の時刻から終点の時刻の差から仮想の通過時刻を取得するように変更しました。
あと、レーダー表示の内部ロジックを見直しました。
これまで、GPSの位置情報の絶対位置で表示していたのを、
基準ポイントを設けて、相対位置での表示に変更しています。
なぜ相対位置に変更したかというと、
レーダー表示で使用しているグラフライブラリの座標軸がfloatのため、
GPSの位置情報のdoubleを型変換すると誤差が生じるためです。
簡単な修正かと思いましたが、グラフライブラリの仕様のトラップや
型変換のトラップにつかまってしまい、思いのほか難儀しました。
改めて認識しましたが、コンピュータは小数点以下の数字が苦手です。
小数点以下の数値のほとんどは、コンピュータでは近似値でしか表せず、
浮動小数点を扱うと問題が発生することが多いです。
近似値とはどういうことかというと、
コンピュータのほとんどは内部的に2進数で処理しているので、
1/2=0.5、1/4=0.25、1/8=0.125、1/16=0.0625…となり、
0.8を2進数に変換すると、
0.5+0.25+0+0+0.03125+0.015625+0+0…
0.110011001100…と循環小数になるわけです。
ですので、
小数点以下の数値を扱うときは、
10のべき乗を使って整数にしてから演算することが多いです。
Javaでどうしてround関数(四捨五入)の引数に
少数点以下の指定がないのかと思ったら、
こういうことかと妙に納得したことを思いだしました。
ちなみに少数点以下を四捨五入するときは、
少数点以下の桁数を10のべき乗でかけてあげて、
round関数を使えばよいわけです。
タイトル画像はXpreria1(SO-03L)のスナップショット画像です。
広告付きですがアプリ自体は無料です。

Posted at 2021/08/03 07:45:26 | |
トラックバック(0) | 日記