au携帯電話に入っている地図ビューアーの簡易ハンディGPS機能によって取得したGPSログ(あしあとデータ)は、 本ファイルは、地図ビューアーにより出力されたGPS情報ファイルです。 出力日時:2009/10/27 08:56:46 +0900 +++GPSログ+++ 940669002,139.604988,35.833148 という形式になっており、「+++GPSログ+++」以下の行に時刻、経度、緯度の順番に記録される。 GPSでは時刻を1980年1月6日0時0分0秒(GMT)からの秒数と
FORTRANで書かれた古いMS-DOSプログラムを.NET/Linkを使ってMathematicaから操るパッケージを作っていたところ、 Process.StartInfo.RedirectStandardInputやRedirectStandardOutputにTrueを設定してもまったく標準入出力をリダイレクトできなかった。(※OSはVista 32bit) いろいろ試してみたところ、16ビットのプログラム
MathematicaでGPXファイルを読み込んで解釈する方法のメモ。 対象となるGPXファイルを xml = Import[filepath, "XML"]; でまずXMLとして読み込んでおいて、 trk = Cases[xml, XMLElement["trk", _, _], Infinity]; でtrk要素を抜き出し、 trkpt = (ToExpression[{"lat", "lon"} /. Cases[#1, XMLElement["trkpt", attr_, _] :> attr, Infinity]] & ) /@ trk; でそれぞれのtrk要素からtrkpt要素を抜き出して緯度と経度を得る。 Sep. 28 2013追記 Mathematica 8からは標準でGPXをImport可能になった。
Mathematicaで友愛数を列挙するプログラム例として以下のようなものが見受けられる。 yakuwa[n_] := DivisorSigma[1, n] - n; Do[If[(yakuwa[yakuwa[k]] == k) && (yakuwa[k] != k), Print[{k, yakuwa[k]}]], {k, 1, 1000}]; しかし、Doでループを回してPrintで書き出していくのはMathematica的に美しくないと思う。 Mathematicaなら関数型プログラミングとパターンマッチを用いるのが良いと思うので、私なら以下のように書く。 Cases[NestList[DivisorSigma[1, #] - # &, #, 2] & /@ Range[100000], {a_, b_, a_} /; a < b -> {a, b}] 実行速度もこちらの
読み込んだGPSログのデータを間引きたい、と思って調べたところ、
(Ramer-)Douglas-Peuckerのアルゴリズムというものがあることが分かった。
基本的な考え方は、
- 折れ線の始点と終点を結ぶ線分と各点の距離を求める。
- すべての点との距離が許容誤差$\varepsilon$以内に入っていれば始点と終点だけを返して終了。
- そうでなければ距離が最大の点Pを選択。
- 始点から点Pまでの折れ線と、点Pから終点までの折れ線のそれぞれについてまた1から処理する。
という再帰的なもの。
再帰的なものはMathematicaの得意分野なので、MathematicaでRamer-Douglas-Peuckerのアルゴリズムを実装してみた。
9月の連休(シルバーウィーク)を利用して、農作業の手伝いも兼ねて祖母宅まで自転車で行くことにした。
中山道経由も考えたが、ルートとしてはまずは甲州街道から伊那路を辿ることにした。
教授の発案で、研究室のメンバーで富津海岸で海水浴→木更津に住む教授の家でホームパーティという催しが行われたので、自転車で参加することに。
ホッケー部の後輩たちが今市(栃木県日光市)にある今市青少年スポーツセンターで合宿をする、とのことなので、先輩OBと2人で自転車で参加することになった。
譲ってもらったロードレーサーに慣れるため、
翌週用事のあった東京ガス深川グラウンドまでの道の下見を兼ねて、
海が見える方向を目指して気ままに走った。
大学院の講義の1つにソーラークルーレスボートの製作があり、その実走行試験を相模湖で行うとのことなので自転車で行ってみることにした。
それ以前は自転車による1日の最長走行距離は36km(東京→横浜)だったのだが、相模湖までは片道65kmと当時の自分にとってはかなりチャレンジング。