日本バーチャルリアリティ学会

日本バーチャルリアリティ学会の論文を読んでいます。

その中で、個人的(研究とは別)に面白いと思ったものをいくつか紹介してみます

ウェアラブル・テレコミュニケーター(pdf)
なんかかわいいです。某人型PC漫画や銃夢を思い出します。

装着型の球面没入型ディスプレイ
すいません、研究している人には悪いですが現行の機材ではどうしても不恰好です^^;

ウェアラブル嗅覚ディスプレイ
ウェアラブル機器の未来像を描くファッションショー:PC watchより)
香る装置、しかもウェアラブル。面白いっす

投稿者 robosheep : 2006年01月21日 20:35 | トラックバック

texpointが使えない

 PowerPointでTEXを使うプラグイン、texpointがなぜか使えません・・・。

 TEXを書いて、いざBMPに出力しようとすると次のようなエラーを吐きます。

Shell command did not produce bitmap "画像のパス"

 調べても載っていない、詳しい人に聞いても分からない。

 仕方ないからノートパッドでTEX書いて、pdfにして画像にし、範囲選択で個別の画像に分ける。というとても遠回りな方法でやりました。

 疲れた・・・。

投稿者 robosheep : 2005年12月25日 23:26 | トラックバック

エノンマップ 周期15

henon-map-n15-a-0.75.gif

 エノンマップの周期15の周期点です。周期が1つ増えると点の数は大体2倍になるので、周期15は周期13の4倍の点が出てきます。プログラムの改良(ていうかデバック)によりかなり軽くなり、3万点でも30フレーム毎秒ぐらいの描画速度になっています。

 ここまで点が多くなると、少しづつ形がハッキリしてきます。静止画なので分かりにくいですが、プログラムで回転させながら見るともっとよく分かります。

投稿者 robosheep : 2005年12月19日 23:22 | トラックバック

最適化

henon-map-n13-all-optimize01.jpghenon-map-n13-all-optimize-color.jpg


以前のプログラムでは点が多すぎて処理がかなり重かったため、近くにある点などを排除して、データの最適化を行いました。

ちょっとスカスカになってしまいましたが、フレームレートは少し回復しました。

 最適化の方法は、4次元の格子を用意してそれぞれの点がどのグリットの中に入っているのかを調べます。そして、既にそのグリットの中に点があったら、それ以上点を保存しないように、つまり一つのグリットに一つの点しか入らないようにします。

 これが意外に難しかったです。なぜかと言うと、各座標100個のグリットの配列を取ったとしても2次元の場合なら100×100で10000個の配列ですみますが、4次元の場合だと実に100の4乗、1億=100Mもの配列を必要とします。もしint(4バイト)なんかで取ってしまうと全部で400Mバイトの配列になります。このぐらいならまだ最近のマシンだと大丈夫かもしれませんが、さらに200個とか取ろうとすると200^4=16億=1.6G、intだと6.4Gバイトです。

 これを解決するために構造体のビットフィールドというものを使いました。具体的には
typedef struct
{
unsigned b0 : 1;
unsigned b1 : 1;

    :
    :

unsigned b30 : 1;
unsigned b31 : 1;
} BIT32;

このような構造体を用意し、これを使って配列を組むことで400Mバイトの配列でもその32倍の数の配列を確保できます。つまり100^4が800^4まで多くなるのです。もちろんこれはビットなので0か1しか保存できませんが、そこに点があるか・ないかということが分かればいいのでそれで十分です。

投稿者 robosheep : 2005年12月17日 13:42 | トラックバック

エノンマップ 周期13 a でスペクトル変更

henon-map-n13-all-color-a.jpg

スペクトルをaで変え、4次元目の値は明るさに変更した画像です。

投稿者 robosheep : 2005年12月16日 04:12 | トラックバック

エノンマップ 周期13

 エノンマップの周期13のやつを表示してみました。aの範囲は -0.5 ~ 6.95 までで 0.05刻みになってます。これがとっても面白い結果になりました。

 まずはすべての点を表示した画像を見てみましょう。
henon-map-n13-all.jpg
さすがに重いです。見て分かるようにFPSが1秒ぐらいになってます。でもすごい、山みたい。

 じゃあ次はa = 6.95からどんどん値を減らして見てみましょう。

a = 6.95
henon-map-n13-a06.95.jpg

a = 5.75
henon-map-n13-a05.75.jpg

a = 4.75
henon-map-n13-a04.75.jpg

a = 3.50
henon-map-n13-a03.50.jpg

a = 1.50
henon-map-n13-a01.50.jpg

a = -0.05
henon-map-n13-a-0.05.jpg

a = -0.5
henon-map-n13-a-0.50.jpg

 見てのとおり最初は周期が小さな時とあんまり変わりないですが、aの値が小さくなっていくにつれて点が近づいていき、次々に衝突していきます。そして、衝突後の変化が近い点であっても激しいものになっているので、こんなにも多彩なグラフになっているんだと思います。

 a が近づいていくのは、2次関数の解での重解に近づいていくのと同じなんですが、その後の虚数解への散らばりぐらいを見ていると、まさに”衝突”って感じがします。すげぇ面白いっす!

投稿者 robosheep : 2005年12月16日 02:58 | トラックバック

複素数エノンマップ 試作

henon-map.gifhenon-map02.gifhenon-map-period.jpg

複素数のエノンマップを3次元に投影したサンプルプログラムです。
プログラムを動かしていると、それぞれの点が近づいて、衝突して複素数に弾かれていくように見えます。とっても興味深いです。

最後の画像は、周期を線で結んだものです。

投稿者 robosheep : 2005年12月12日 13:10 | トラックバック

4次元の透視投影

4d03.gif

4次元の透視投影を追加しました。言ってみれば、4次元の遠近法です。難しそうに聞こえますが、これも3次元の場合とほぼ同じで、座標軸が一個多いだけです。

こうやって4次元立方体と一緒に表示して動かすと、4次元で回転しているのがなんとなく分かります。

4dpoints01perspective.zip

<操作方法>
右クリックしながらマウス移動:4次元の回転
左クリックしながらマウス移動:3次元の回転
右クリックしながら上/下矢印ボタン:点サイズ拡大/縮小
左クリックしながら上/下矢印ボタン:座標の縮小/拡大
左クリックしながら右/左矢印ボタン:点の増加/減少

実行できない人は.NET frameworkとか入れるといけるかもしれません。

投稿者 robosheep : 2005年12月07日 17:19 | コメント (2) | トラックバック

面白いですね。。
座標軸が一つ多いってどこに軸が増えたのでしょう?

X軸、Y軸、Z軸・・・。

私が理解できない範囲のようでしたら、
割あいください^^;

投稿者 ELU : 2005年12月07日 21:59

増えたのは4つ目の軸です、仮にこいつをW軸としましょう。プログラムの中ではそれで終わりです。3次元も4次元もほとんど変わりありません。

しかし、僕たち人間にはどう頑張っても4次元を見ることはできません。3次元の人間なので。

そこで、4次元の物は3次元にしてしまいます。一番簡単なのは、4次元目の値、W軸を無視することです。これで、僕らが見ることができる3次元になりました。

ですが、これだけでは4次元の意味がなくなり、ただの3次元の物になってしまいます。なのでそれだけではなく、4次元での処理をしてから3次元に変えます。ここではその処理として、4次元で回転させたりしてます。4次元の回転と言っても、3次元の回転と変わりありません。回転するのは必ず2次元の面なのですから。

投稿者 robosheep : 2005年12月08日 18:32

擬似RGBスペクトル表示

4d01.jpg4d02.gif

以前書いた、テクスチャを使った擬似RGBスペクトル表示プログラム。こうやってたくさん表示すると綺麗です。4次元の座標をテクスチャの横の位置座標にして、マッピングしてるだけです。

投稿者 robosheep : 2005年12月06日 21:14 | トラックバック

4次元立方体表示

hypercube01.jpg

 4次元物体のデータ(点、線、2次元面)を読み込んで描画するプログラムです。4次元立方体データを書き込むプログラムを作り、これで表示してみました。

 4次元立方体を定義するのは簡単だと思ってたんですが意外に難しい。できることにはできるんですが、綺麗なコードになりません、誰か御教授を。

まぁ それぞれの座標を2進数の各桁として、各頂点を定義する(0101→p(-1,1,-1,1))まではいいとして。それぞれの点の2進数値の”ハミング距離が1の2つの点に線を”、”ハミング距離が2以下の4つの点に面を”張るっていうのでいいと思うんですが、実際のコードがどうしても汚くなってしまいますです・・・・。

投稿者 robosheep : 2005年11月10日 15:17 | トラックバック