next up previous
Next: 参考文献 Up: 「KLICの視覚的インターフェースに関する研究」に関する成果概要 Previous: 研究の内容

研究の成果

ソフトウェアの成果として、「KLIC の Tcl/Tk インターフェース klitcl」、研究上の成果として、「グラフ描画アルゴリズムの改良」 「Undo 機能の研究」が挙げられる。以下にその概要を述べる。

klitcl の実装

klitcl という、KLIC から Tcl/Tk を利用するためのインタフェース を制作した。klitcl を利用することにより、KLIC を用いたプログラムに GUI を装備することが容易となる。

利用環境としては、以下のバージョンのソフトウェアを使用する ことをを想定している。

KLIC: Version2.002 , Tcl: Version 3.7 , Tk:Version 4.0 OS としては、SunOS 4.1.x を想定し、それに基づいて実装している。

klitcl は、以下の命令を KLIC に追加する。

これらの命令群は、tcl というモジュールに含まれるような 実装となっているため、実際に用いる際には以下の例のように、最初に use_module を用いてモジュールを読みこんでおく必要がある。

:- use_module(tcl).
:- module main.
main :- tcl:tcl_init,
        tcl:tk_init,
        tcl:tcl_eval("button .b -text Exit -command exit",Res1),
        tcl:tcl_eval("pack .b",Res2),
        io:outstream([print(Res1),nl,print(Res2),nl]),
        tcl:tk_mainloop.

これは、以下の Tcl/Tk スクリプトに(ほぼ)対応する。

button .b -text Exit -command exit
pack .b

また、Tcl の側から KLIC の述語を呼ぶための手段として、KLIC という Tcl 命令を提供する。 呼び出し方は、以下の例のように、「KLIC <述語名> <引数>」 として呼びだす。

              :
        tcl:tcl_eval("button .b -text Test -command {KLIC test Hello!}",Res1),
              :
test(S) :- io:outstream([print(S),nl]).

これにより、''Test'' と表示されたボタンを押すと、画面には Hello! と表示される。

グラフ描画アルゴリズム

現存する各種のグラフ描画アルゴリズムは、グラフの構造が与えられたときに、 それを適切に配置することは可能だが、グラフの初期配置が人間の手に よって与えられ、それをアニメーションさせながら動かすことにより 最適な配置まで持っていくような場合には、あまり適しているとは言えない。

ビジュアルプログラミングシステムを始めとする、インタラクティブな コンピュータシステムにおいて、情報を的確にユーザに提示する手段と して、アニメーションは非常に有効な手段となり得ることを考え、 最終的には、GHC の実行の可視化に用いることを目標として、 既存のグラフ描画アルゴリズムを、アニメーションに適した形に改良する ことにした。

本研究においては、並列論理型言語 GHC のビジュアル化を考えるため、 グラフの描画アルゴリズムとして、「スプリング・モデル」をベースと したものを用いることにした。「スプリング・モデル」は、ノードの 均一な配置ができる点などで有利である。

スプリング・モデルの中で、特に Kamadaのアルゴリズム[2] とEades のアルゴリズム[3]をベースに、グラフのアニメーションの実験を 行ってみたところ、これらのアルゴリズムの計算の1ステップをアニメー ションの 1 コマに対応させて表示させた場合に、ノードの動きが不連続に なってしまい非常に見苦しくなるという現象が見られた。この現象は、 両者のアルゴリズムがアニメーションに適していないことを示しており、 改良の必要があると考えた。

ノードの不自然な動きの原因となっているのは、Kamadaにおいては ノード微小移動量の算出に用いるニュートン法であり、Eadesにおいては 「ノード間斥力は距離の2乗に反比例する」という、Eadesのアルゴリズムに おける力の定義である。

この問題を解決するために、以下の方法をとった[4]。

これにより、改良を加える前に比べて、自然なアニメーションが可能であ るということが確認できた。

グラフをアニメーションするには、このような方法の他にも、 あらかじめ目標配置を計算し、それに応じてコマ割りをしてアニメーション をする方法がある。このような方法は、アニメーションそのものの速度を上げる ことができる反面、アニメーションの最中にもユーザのグラフに対する 操作を許すような場合に、処理が大変になる。また、再配置およびコマ割りに まとまった時間を必要とするため、インタラクティブ性を損う恐れがある。

図1に、実際のグラフに対して KamadaとEadesの各アルゴ リズムを適用した結果と、これらを改良したアルゴリズムを適用した結果を示 す。図中のドットは、ノードの移動した軌跡を示している。

これらを見るとわかるように、改良後の方が、ノードの動きが自然である。特 に、Eades の改良の方では、ノードの動く範囲がある一定の範囲内におさまっ ている。

GHC の実行をグラフを用いてアニメーション化する場合、複数のグラフがさら に互いに接続される状態というのが起り得る。このようなときに、各々のグラ フのノードの移動する範囲がある一定の範囲にあることが保証できれば、その 各々のグラフを「ひとつの大きなノード」とみなすことにより、「グラフ同士 をつないだグラフ」に対してもこの改良したアルゴリズムを適用し、アニメー ションをすることが可能になる。

今後は、この改良したアルゴリズムを利用して、実際にビジュアルなGHC の実 行系を実装する予定である。

  
図1: 各アルゴリズムの適用結果

Undo 機能についての研究

インタラクティブなシステムにおいて、自分のやった操作を取り消すための 「Undo機能」は非常に重要な位置を占める。 これまでに様々なプログラムに Undo 機能が使われているが、それらには、任意の状態に戻すために多くの ステップを経なくてはならなかったり、それまでに通過した全ての状態を 保存できず、ある状態に戻ることができないなどといった欠点があった。

我々は、Undo のインターフェースとして、従来の 「ヒストリを前後にたどるもの」の他に、新たに木構造に基いた Undo 機能を実現した。

Undo のインターフェースとして、「ヒストリを前後にたどるもの」 「上下左右に木構造の中を動くもの」のそれぞれについて、「移動キー だけのもの」と「状態をミニチュアで画面表示し、それを選択するもの」を 実現した。また、「全部の状態のミニチュア表示から選択するもの」 「全状態のうちの主要なものを選んでミニチュア表示をし、そこから選択するもの」 を試作し、評価した。

評価結果としては、木構造の中をたどらせる Undo よりも、従来からある、 ヒストリをたどるような Undo の方が、目的の状態にするためにかかる 時間が短かった。また、ミニチュアを表示するものよりも、表示しない ものの方が短い時間で目的の状態に到達できた[5]。

今後の課題

klitcl に関しては、さらなる改良を行い、 機能の拡張を図り、 klitcl を用いて、ビジュアルでインタラクティブな GHC 実行系の実装を行っていく。

ビジュアルプログラミング・システムに関しては、 アニメーション技法についての研究を、グラフ描画アルゴリズムをベース として進める。

研究成果についての自己評価

klitclの制作、および、ビジュアルプログラミング・システムの 基礎として、グラフ描画アルゴリズムと入力メソッド(特に、Undo機能) について研究を進めてきた。 klitclについては、これをフリーソフトウェアとして 発表することにより、多くの KLIC プログラマが GUI を取り入れた アプリケーションを容易に作成できるようになる。 また、グラフ描画アルゴリズムや入力メソッド の改良については、今後開発するビジュアルプログラミング・システムの 重要な要素技術となると共に、それぞれ単独でも様々な応用が考えられる。



www-admin@icot.or.jp