Chapter Thirty-five

第35話



自分が見たい方向から見たように自由自在にグラフを表示させるのは簡単なことではない。3D_Graph.llbではZ軸とX軸の周りの回転角を数値指定して実行し、表示されたグラフを見ながらトライアンドエラーで角度を決めていくことになる。

マイクロソフトのエクセルではもっと直感的に、データ範囲の直方体を表示して直方体の頂点をドラッグすることにより表示したい角度に設定することができる。ふだんはなにげなく使っているので考えたこともなかったが、どうやって実現しているのだろう。

まず、重心を固定することにしよう。これで自由度は回転だけの3個になった。画面上の頂点のドラッグはガラス越しに操作するようなものでX,Z座標(ディスプレイの水平方向をX軸、垂直方向をZ軸としよう)しか指定できないが、うまいことに、重心と頂点の長さは変わらないから計算で電子銃の方に向かうY座標を求めることができる。重心と頂点の位置の2点が決まってもその2点を結ぶ直線の周りで自由に回転することができるから、直感的な動きをさせるためには自由度の殺し方をじっくり考えなくてはいけない。

データについている座標系のz軸が傾いているように見える回転をさけるのが自然におもえるので今回はY軸周りの回転を殺してしまおう(データ座標系を小文字のx軸,y軸,z軸としよう)。下の図のようにz軸はディスプレイに投影すると常に真上を向いているように見えることになる。

画面上の頂点のドラッグ量を1)データについている座標系のz軸周りの回転量と2)ディスプレイのX軸周りの回転量に分解できると希望の動きをさせられそうだ。これに気がつくまでにずいぶん時間がかかってしまった!

今回は全体の手順をおおまかに説明していこう。

まずデータ領域と重心を通る座標軸を表示するためのデータを用意しよう。最終的にはx-yグラフに描画することになるため、ひとつなぎになるようにデータを並べて成分毎に配列を作る。下のダイアグラムでは"BoxLine.vi"がその役割を担当している。各成分のデータ配列をクラスターにまとめて出力している。

初期状態では左上の"Rot Matrix.vi"で適当な角度で回転マトリックスを作っている。その回転マトリックスと"BoxLine.vi"からの各成分のデータ配列をクラスターをもとに左下の"Box Draw"でデータを回転させて表示用のグラフデータを出力している。"Box Draw"ではコントロールに使う頂点が表示される位置が分かるので、x-yグラフのカーソルの属性ノードに指示してカーソルを頂点に移動させている。

初期設定が終わると右側のWhileループに動作が移っていく。

カーソルの移動をシフトレジスタの変化で検知して、カーソルが変化したときだけCase構造が実行されるようにしている。Case構造の中では、"Guess"というviでカーソルの座標から必要な回転角を割り出して回転マトリックスを作り出している。この新しい回転マトリックスを、前回までの回転マトリックスに左からかけて"Box Draw"に渡してカーソルに対応した表示に更新している。

このようにしてできあがったのがViewSelect.viだが、まだ考えが足りないところがあるようで、おもいきり上に向けたり、下に向けたりすると予想外の運動をしてしまうバグが残っている。

とりあえずこのあたりで中断して、次回からそれぞれのサブVIの中身を紹介していこう。

See you!


Nigel Yamaguchi

戻る