Chapter Eighty

第80話


さて、前回のネットワークの表示プログラムを実際に動かしてみた人は、からみあった網をほぐしていく作業が大変なことに気がついたことだろう。この作業は適度に頭を使うが、甲斐のない努力の類いなのかもしれない。今回は見て楽しみながらネットワークの状態を調べられるようにしてみよう。

前回のプログラムは操作する人が配置すれば見易くできるかもしれないと考えて作ったのだが、無理があったようだ。人間の調整能力に過大な期待をもってはいけないのだ。今回は素子の配置を円形にして、プログラムで試行錯誤を繰り返して入出力の素子ができるかぎり離れたところに配置されるように並べてみることにした。

前回は素子の連結状態を矢印で示してみたが、画面が乱雑になる傾向があった。今回は素子と素子を結ぶ直線を中間で色分けしてどちらの素子が入力なのか、出力なのか区別がつくようにした。素子の出力側がピンク色で、入力に接続されているのがねずみ色となっている。

素子を円形に配置した後、入力と出力の距離を計算し、ある値よりも小さいときには遠方になるように対面側の素子をランダムに選んで入れ替えてみることにした。最小の距離にある組み合わせがある値以上になったときに再配列を終了する。

再配列が終了したところでx-yグラフに線を書きながら入出力の接続を順に行う。

カーソルの形がいろいろあることに気がついたかもしれないが、今回は16種類の素子それぞれに異なるカーソルのマークを割り当ててみた。記憶力が良くないのでどれがアンドでどれがナンドなのか分からないがとりあえず、どの記号かに割り当てられているはずだ。

すべての直線描画が終了すると、直線が消えて、素子を示すカーソルがすべてグレー色になる。その後パターンの表示が始まり、素子の状態が変化するものについて入力源から直線が延びてくる。入力のTrue、Falseに応じて直線の色は赤や青になっている。ちょうど矢が目標をめがけて飛んでいくようにみえる(つもり)。この辺は止まった画面では表現しきれないので実際にプログラムを動かしてもらうしかない。

x-yグラフのplot infoクラスターのFill/Pt. Colorを適当な色に設定すると二本の直線の間を塗りつぶしてくれる。このスクリーンショットでは見えないのだが、このVIでは紫に設定している。

素子の状態もTrue、Falseに応じて赤や青になってくる。一度も変化しない凍りついた素子はグレーのままとなる。

矢印の動きだけを見つめているとどこで状態が切り替わったのか分かりにくいので、状態が変化するたびに背景色は薄いグレーと濃いグレーを表示するようにした。

こんなふうに表示に凝りだすとダイアグラムのスペースがどんどん窮屈になってくる。属性ノードはうまい仕掛けだが、スペースに関しては改良の余地がありそうだ。いまだにLV4を使っているから知らないだけで、LabVIEW6iではうまい具合に改良されているかもしれない。そのうちに6iにバージョンアップしよう。

サブVIに分割することもできずスペースが無くなってくると、いつものようにシーケンスを使うことになる。フレーム0ではファイルの読み込みと、試行錯誤によるカーソルの配置の決めを行っている。グラフデータの消去やグラフの座標範囲の初期化もここに置いた。

フレーム1では素子の結合状態の表示を行っている。setCursorと書かれたアイコンで属性ノードのカーソルリストに2次元配列にしたがってカーソル位置を入力している。カーソル名やカーソルスタイルもこのアイコンの中で行っている。

素子の結合状態はarrowと書かれたアイコンに始点と終点を指示して、始点-中点、中点-終点の2本のグラフデータを出力する。1個の素子から2個の素子に出力が出るので、グラフデータは4本となる。内側のループの中でグラフの色はピンク、ねずみ、ピンク、ねずみの順番に指定される。その他のプロット属性は定数で与えている。

これで結合状態の表示が終わったので、フレーム2では適当な時間のwaitをかけている。

フレーム3は無理やり押し込んだ感があるが、パターンデータをグラフィカルに順次再現していく機能をプログラムしたものだ。ホワイルループの中に置かれているパターン入力に従って、外側のフォーループに32ビットの1次元配列のパターンデータが与えられる。そのループの中のlast now patrnというへんな名前のついたアイコンで前回の数値から変化したビットを見つけて、ビットが変化している場合はケース構造の中でアニメーション表示を行っている。グラフのPlot InfoのFill・Pt. colorに適当な色を設定すればグラフの間を塗りつぶしてくれる。

今回はダイアグラムを1画面内に収めるために作ったサブVIの中までは紹介できなかったが、興味のある方はVIの中味をのぞいてみて欲しい。

次回は78話で書いたようにランダムネットワークの構造の視覚化を考えてみたい。

 

See you!

Nigel Yamaguchi


戻る