曲がった迷路その26 - ユーザインターフェイスの設計 [曲がった壁を持つ迷路の生成]
前回、一気にアルゴリズムを実現するためのクラスの設計をやってしまった。あとはユーザインターフェイスをどうするかを決める。今回は小さなアプリだし、それほど複雑なことをするわけではないのでユーザインターフェイスはほとんど自動的(Appleのガイドラインに従うと)に決まってしまう。
ユーザインターフェイスの設計
せっかくなので久しぶりにドキュメントスタイルのアプリにしてみよう。エディタでもビューアでもない、ライトオンリアプリ(Write-Only Application)になる。僕の作るアプリとしては、なんてぴったりなんでしょ。ドキュメントスタイルにするといろいろ余分な実装をしなければいけないが、あまりまじめにやるとかなり大変なので基礎的なところだけにする。
メインメニューには
- New...
- Save
- Save As...
「Save」メニューは完成した迷路をpdfで保存する。pdfなのでプリントメニューはいらないだろ。同じことだけどプリントダイアログを設定したり用紙のサイズを気にしたり、というのが面倒なのでやめる。実は正直に言うとこれまでプリントメニューを実装したことがない。
こまかなパラメータの設定は描画ウィンドウではなく、別のパネルにしよう。そのほうがすっきりする。メインメニューの「Window」メニューに「Show Info...」メニューを作って、これを選ぶと最前面にある描画ウィンドウのパラメータを表示して、その値を編集できる。
あとはそれほど必要なものはないだろう。
ユーザが設定可能なパラメータ
今回はパラメータがずいぶんある。これを基本的には全部ユーザが変更できるようにしよう。パラメータとしては
- スペックルポテンシャルの大きさ(FFTサイズ)
- featureSize
ほかのパラメータとしては
- 壁衝突判定の閾値
- 衝突回避ポテンシャルの高さ
- 衝突回避ポテンシャルの半径
- 単位壁長さのレイリー分布のσの値
- 式-12のαの値
- branchingProbability
スペックルポテンシャルの平均値が1になるように先に規格化しておく。これはパーセバルの定理があるので簡単。
そうしておくと衝突判定の閾値は1に対していくらにするか、という設定になる。同時に衝突回避ポテンシャルの高さも1に比べていくらにするか、ということになる。
衝突回避ポテンシャルの半径と壁長さのσはfeatureSizeに対する比にする。そうしておくとスペックルポテンシャルの広さやfeatureSizeを変えても相対的には同じになってわかりやすいだろう。
式-12のαもこのままで比になるのでこの定義のままにする。だたし、スペックルポテンシャルの広さを大きくすると、Q値はそのまま大きくなって、収束まで時間がかかるのでこの辺は手加減が必要かもしれない。
branchingProbabilityは桁が変わるぐらいでないと違いが現れないのでbranchingProbabilityBpの値は としてユーザはpの値を指定することにしよう。pが1違えば分岐確率は十進で一桁違うことになる。このくらいがいいだろう。
出入り口の指定
迷路の入り口と出口はウィンドウをクリックすることで指定できるようにしよう。そうすると迷路表示のためのNSViewのサブクラスにマウスをトラックするメソッドを書くことになる。それとも出入り口指定専用のNSViewを貼付けておく、としたほうが簡単になるかもしれない。どっちにしてもめんどくさい。親切なインターフェイスとしては、ウィンドウに出口と入り口の小さなアイコンがあって、それをグラブしてドラッグすれば位置を変更できる、というのが望ましい。今回迷路の内部には出入り口はない、としたので出入り口アイコンは迷路の外にしか移動できないようにする必要があるけど、これをわかりやすく(たとえば、外堀があってそこの中しかアイコンを移動できないようになっていて、反対側に移動するためには外堀を半周回さないといけないとか)レスポンスを書くのは結構面倒。ウィンドウの真ん中までドラッグして離すと、バネみたいにびゅんと外周に戻るとかいうふうな表現にするのが親切ではある。
まあ、暇があったら考えよう(ということはそこまではやらないと言うことに等しいけど)。
2009-07-31 22:31
nice!(0)
コメント(0)
トラックバック(0)
コメント 0