今日の自転車

計測区間内(片道)
走行距離:13.17km
走行時間:30min09sec
平均速度:26.2km/h
最高速度:47.2km/h


・・・・等と書くと運動の記録になるかな、と思いつつも、強度はともかくもっと運動の頻度を上げないと効果は無さそうです。もう夏ですが、水着になれるか不安ですね・・・(^^;; 


帰路の途中、久々に吉野家へ寄ろうとしたのですが、近くの吉野屋は午後10時までの縮小営業中との事。味よりも、コンビニ的便利さが重宝していただけに、価値が一つ分減った印象ですね。

寄る年波からのクォータニオン学習

千里の道も一歩から。というわけで、仕事の一環でもありますが、クォータニオンの学習中です。クォータニオンとは何か?と言う事を、復習として自分に言い聞かせるように説明してみます。

  • 三次元空間上における物体の姿勢を示す、座標変換行列に変わるものとして使用する。変換行列に対して、姿勢に関する制限(=ジンバルロック)が無く、クォータニオン同士で補間が容易である。
  • 1の大きさを持つ単位クォータニオンでは、ある姿勢からある姿勢に変わる回転のみを扱う(=3×3の姿勢行列)。並進も大きさの変化で表現することができる(が、単位クォータニオン+並進で扱ったほうが色々都合が良さそう)
  • 概念としては、c=x+yi(iは虚数単位)のような複素数の延長上にあり、虚数空間内でそれぞれ直行するi,j,kという虚数単位を導入し、q=w+xi+yj+zk=q(w,V)(Vはx,y,zのベクトル)のように表現する。q(w,x,y,z)と、4つのパラメータで表されるので四元数クォータニオン)と呼ばれる。
  • クォータニオン同士の掛け算は、A(a,U),B(b,V)とした場合、AB=(ab-U・V,aV+bU-U×V)となる。
  • x,y,z軸を中心としたθ[rad]分の回転を表したい場合、クォータニオンはq(cos(θ/2),sin(θ/2)Ve)(Veは回転方向を示す単位ベクトル)
  • あるベクトルVa(0,V)(クォータニオンとしてベクトルを表現すると、実部が0になる)をクォータニオンの軸に沿って回転させ、Vbにしたい時は、Vb=q・Va・q^-1のように掛ける。


こんな感じでCGプログラミングに使っていくと良いらしいです。後は、行列←→クォータニオンの相互変換や、クォータニオンの補間操作がワンポイント的に必要になりますね。力学シミュレーションプログラム上で、物体回転操作、回転速度/加速度表現には必須かもしれません。しかし、実部1次元+虚部3次元で、都合4次元の数といわれると、一瞬??、と来ます(^^;;

GPS地図DLスクリプト再燃

さて、しばらく眠っていたqpeGPS地図DLスクリプトですが、ルート探索機能の実装にもちょっと必須になってくるので、今までサボっていたスケール可変機能を追加したいと思います(^^;;
ちなみに、qpeGPSでは、同じ地図フォルダ内にスケールの違う地図を入れておくと、上下キーによってスケールを可変してくれるのだそうですが、実際に試した事はありません・・・・・本当にやってくれるのでしょうか?


尚、ルート探索機能は、市販ソフトのようにスマートなものでは無く

  1. 専用地図DLスクリプト+点群道路地図変換スクリプトによって専用データに変換(これはPC等であらかじめ作成)
  2. ルート作成スクリプトに、目標位置、現在位置を座標により入力(ランドマーク登録ファイル等を作って、あらかじめ目標点をいろいろ作るのも手ですね)すると、ルートをトラックログとして出力
  3. qpeGPS側で、出力されたトラックログをread。目標点までの経路が表示される。


という感じになる予定です。現在のqpeGPSには、ウェイポイントの登録機能が無いのが残念ですね。ただ、ルート作成スクリプト側に自分の進行速度を入力すれば、目標地点までの走行距離と、大体の到着予想時刻を出力するくらいの事は出来そうです。


ここまで来たら、GPSソフトを0から作りそうになりますが、そこまでの労力はまず割けません。Perlではなく、JAVA(J2ME/Jeode?)によるGUI上で動くルート作成プログラム辺りが落とし所でしょうか・・・と、妄想ばっかりが膨らみます。まずPerlで、最後までやり遂げることが先決ですね_| ̄|○ とりあえずは、PerlMagickなる汎用画像ファイル操作モジュールからいじってみることにします。