プログラミング」カテゴリーアーカイブ

eps変換

latexを使ってると画像をepsに変換する必要がよくあると思うんですが,これまでinkscapeでいちいち画像を開いてepsで保存するというめんどくさい方法で変換していました.ただ,まとめて複数の画像を変換したりするにはあまりにめんどうなので簡単なbatファイルを作成してみました.
inkscapeがインストールしてあれば動くと思います.

[bat] rem cvt2eps.bat
set INKSCAPE=C:\Program Files\Inkscape\inkscape.exe

for %%f in (%*) do (
"%INKSCAPE%" –export-eps "%%~dpf%%~nf.eps" "%%f"
)
[/bat]

このbatファイルに変換したいファイルをドロップすればepsに変換してくれます.複数同時にドロップしても大丈夫です.inkscapeさんがいい感じに変換をしてくれるので,bmp,jpg,png,svgなんでも変換できます.かゆいところに手が届くinkscapeさんはさすがやで.

ときどきこういうバッチを作ったりするんですが,いまだにcmdの構文をしっかり覚えていなくて,毎回調べながら書いています.覚えたら便利な気もするんですが,使う頻度が少ないのとあまり好きな構文じゃないのでいまいち覚えられません.

3体問題

最近更新していないじゃないか,とsierraさんに怒られたので久しぶりの更新です.
もう少しまめに更新を行おうと思います.

toggerの3体問題のまとめをたどって見た3体問題の特殊解がおもしろかったので,プログラムを書いてみました.パラメータはInstitude of Physics Belgrade THREE-BODY GALLERYから拝借しました.いずれも周期性を持ったシミュレーションになっています.

0-9キー:異なる初期値でシミュレーション  スペース : 色替え
7, 8, 9ではかなり計算精度を上げているので,少し重いかも

はじめは単純なオイラー法でシミュレーションを実装していて,Brouckeのパラメータではそれでもうまく出来ていたのですが,計算精度が悪いせいかDRAGONFLY以降のパラメータではすぐに発散してしまいました.精度を上げるためにルンゲクッタに変えてみても発散してしまったため,しょうがないのでDRAGONFLY以降のパラメータでは計算ステップをかなり細かくしています.GOGGLESパラメータは特に計算がシビアなようで,ずっと動かしているとそのうち発散します.今回はprocessingで作ったのですが,processingはクラスインスタンスを生成すると極端に遅くなってしまうので,やっぱりプログラマよりはデザイナ向けの環境なんだなぁと思いました.

個人的には一番最初に表示している”Broucke A11″や2番目の”Broucke A7″あたりがかなり美しくデザインされている感じがして好きです.実際に宇宙には複数の恒星から成る系もあるそうなので,今回シミュレーションしたような軌跡を描いている星も実在するかもしれないと考えるとロマンがありますね.

小さなサイズのEigen::MatrixXfのinverse()が遅い

c++の線形代数ライブラリのEigenをよく使うのですが,前々から小さなサイズの動的行列の逆行列を求める処理が重いことが気になっていました.
以下のページを見て,てっきり動的行列でもサイズが小さければ公式を使って逆行列を求めるのかと思っていたのですが,よくよく見ると固定サイズでないと公式を使った計算は行わないと書いていて,実装を見てみると動的行列では必ず(1×1を除いて) partialPivLu を使って逆行列を求めているようでした.
http://eigen.tuxfamily.org/dox/group__TutorialLinearAlgebra.html

LinearSolverのsolve()を使えとか,サイズが小さい時は固定サイズを使えということなんでしょうが,やっぱりプログラム上どうしても動的行列の逆行列が欲しい場面はあるわけで,そのようなケースのために次のようなコードを書いてみました.

続きを読む

EKFによるボールの3次元位置推定

ボールの3次元位置推定プログラムを書いてみました.

赤色の細い丸が検出されたボールで,赤色の太い点が拡張カルマンフィルタで推定した位置,数値がボールの3次元座標になっています.

カメラパラメータ・ボールの大きさは既知で,画像上でのボールの位置・大きさを基にボールの3次元位置を推定しています.zがカメラからの距離になりますが,テーブルまでの距離は0.5[m]くらいだったのでそれらしい値が出てる気がします.