SSブログ

ランダムドットステレオグラム [ランダムドットステレオグラムアプリ]

今日ほぼ一日かけてちょっとしたソフトを書いていた。ランダムドットステレオグラムを作るアプリ。

まだ完成してないけど、基本的な動作はするようになった。ランダムドットステレオグラムの例を兼ねて、アプリの出力例。
0605randomdotcolor.jpg

図の上に並んだ緑色のふたつの丸が重なるように目の輻輳を調整すると、ランダムな色の面に凹凸が見えてくるはず。

なんで、こんなものを作ろうと思ったか、というと、2次元上の実数値関数
実数値関数
を表示するとき、何らかの方法で2次元化しないといけない。例えばMathematicaには
  • ContourPlot
  • DensityPlot
  • Plot3D
なんかがある。CountourPlotというのは等高線表示で、DeisnityPlotというのは関数の値を明るさや色で表示するもの。Plot3Dというのは関数の値をz軸に見立てて3次元の立体として透視図法的に表示するもの。それぞれの例を示すと、
0605contour.png
これがContourPlotで、
0605density.png
で、これがDensityPlot、
0605plot3D.png
これがPlot3Dで、みっつとも同じものをプロットしている。

ContourPlotやDensityPlotは直感的でないので見慣れないとよくわからない。Plot3Dは比較的わかりやすいけど、例えば大きな凸があるとその後ろがどうなっているかは表示を回転させないとわからない。ということで一長一短。

ちょっと毛並みの違ったものとしてランダムドットステレオグラムを使う、というのを考えた。Mathematicaで書いてたけど、やっぱりかなり効率が悪い(表示に時間がかかる)ので、Cocoa/Objective-Cで書くことにした。ContourPlotやDensityPlotに較べると直感的だろう、ちゃんと見ることができれば、だけど。ちなみに、最初のカラーのステレオグラムは
2次元sinc関数
のようなsinc関数をプロットしたもの。うーん、直感的か?と言われると....

アプリとしてはまだユーザインターフェイスとか書かなきゃいけない部分が残ってる。それと、
  1. 入力形式をどうするか
  2. ステレオグラムを素直に左から描いているので、ランダムパターンの対称性が悪い
がある。対称性の問題というのは例えばさっきのカラーステレオグラムを見てもらうとわかるんだけど、左端はパターンがまっすぐだけど、右端はぐにゃぐにゃ曲がっている。これはある程度はしかたないんだけど、真ん中から作っていけばぐにゃぐにゃは左右に分散する。ただし、プログラムは面倒になる。

ちなみに、今回作ってみてはじめて気がついた。不連続のある関数の表示にはカラーのグラデーションがあるランダムパターンより、モノクロのバイナリの方が見やすい。例えば、
0605randomdotbinay.jpg

というようなかんじ。jpeg圧縮するとノイズのせいでわからんか。

とりあえずもうちょっとちゃんとしたら、またここで公開することにするのでよろしく。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立06/05献立06/06 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。