ラベル プログラミング の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示

2012年1月24日火曜日

Processing用のOBJ Loaderの導入

NyARToolkitに3DモデルをAR表示するとなると,Processingにローダーを入れなければならない.

今回導入するのは,.obj形式のProcessing用のローダーである,"saitoobjloader"である.

例によって,Windowsの環境を想定している.

実行環境は,Windows7 (64 bit).


.obj loader for Processing で検索すると,出てくるので,サイトにあるOBJLoader.zipをダウンロードする.

中身を解凍すると,フォルダのなかに,"objloader.jar"というファイルがあるので,そのファイルをコピーして,NyARToolkitのスケッチフォルダの中にある,codeフォルダに入れておく.

これでobj形式の3Dモデルが表示できるようになる.


プログラムのコードの中の先頭に,

  • import saito.objloader.*;
と記述して,外部ファイルをインポートする.

そして,
  • OBJModel model;
と宣言する.

setupの関数の中には,
  • model = new OBJModel(this);       //objファイルのモデル生成
  • model.load("samplemodel.obj");    //samplemodel.objという名前のモデルをロード
このように記述することで,実際にモデルをロードすることができる.

モデルを描画するときは,draw()関数の中に,
  • model.drawMode(POLYGON);    //ポリゴンモデルを生成
  • model.draw();                          //モデルを描画
このように記述する.これで,実際のモデルが表示される.



以上が,objloaderの導入の流れになる.


今回はここまで.







2011年4月13日水曜日

累乗計算の高速化

プログラミングの練習問題に累乗計算があったのでメモ.

条件は,以下のとおり.

  • a^nの2つの引数を使った関数(メソッド)を用意し,計算結果を表示する
    • 最初は,for文などで実装
    • 次に,O(log(n))になるように実装

最初のfor文使うやつは簡単.プログラミングやったことある人なら,たいていできる.

次の計算量を減らすやつが大変.

まず,最初のプログラムでは,計算量はO(n).
つまり,n回の計算処理をするということになる.

これをどうやってO(log(n))にまで落とし込むか?

最初は安易にnを2で割って,2つの値同士を計算すればいいと考えた.
つまり,2^10 = 2^5 * 2^5 = 1024と考えたわけだ.
でもこれ,安易すぎる...
計算量だって単純にO(n/2),実質O(n)だ.
これじゃあたいして意味がないじゃないか.

着眼点は悪くない,たぶんnの値を2の累乗の形にして表して,計算すればいいはずだ!
と思ってアクセクしたけど,いいアイディアも浮かばず.結果的に調べました.

まぁ,練習問題になるくらいだし,アルゴリズムは出来上がってるのが普通.調べたら,やっぱりありました,累乗の高速化アルゴリズム.

詳しいことはGoogleなりなんなりで調べれば良い.

とりあえず,アルゴリズムは以下のようになる.

power(a, n)
  • n == 0  | = 1
  • if  even n      |  n = n/2 , power(a*a, n)
  • else if odd n  |  a*power(a, n-1)


これにしたがって実装(Rubyを使用)してみた.
これはすごい.計算回数をカウントしてみたところ,2^100の処理がたったの9回になった.
そのほかのパターンでも,大幅に処理回数が減った.
みごと,O(log(n))になった.

めでたしめでたし.良い練習問題だった.