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_init Tclインタープリタの初期化を行なう
tk_init Tkの初期化を行なう
tcltk_init tcl_initとtk_initを一度に行なう
tcl_ecal(Command, Result) Tclの文 Command を評価し、結果を Result に返す
tk_mainloop Tkのイベント待ちループに入る

これらの命令群は、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