LMNtal のグラフィック機能の設計と実装

2005 年度卒業論文
LMNtal の
グラフィック機能の
設計と実装
Design and implementation of graphic
features of the LMNtal system
早稲田大学理工学部
情報学科
学籍番号: 1G02P065-0
中野 敦
指導:上田 和紀教授
背景と目的
LMNtal処理系の機能を拡張し,
グラフィック・プログラムを
実行できるようにする.
※グラフィック・プログラム
=静止画,アニメーション,ゲーム(I/O機能)など
LMNtal言語
→階層的グラフの書換えに基づく言語
→実世界を表現しやすい
逐次言語
→実世界を宣言型で記述出来るとは
言えない
より実世界に即した,
より直感的なプログラムを.
→LMNtalでの実装
1
LMNtal言語説明(1)
階層的グラフの書換えに基づく言語
構成要素:Atom,リンク,膜,ルール
リンクするAtomが
膜により階層化
→階層的グラフ構造
ルール(書換え規則)により
グラフ構造を書換え→計算が進行
情報(アトム)の繋がり(リンク)と,
まとまり(膜)が表現できる.
→現実世界を容易に表現
※宣言的に表現したものをダイレクトに操作できる
2
LMNtal言語解説(2)
テキスト表現 ※実際のアニメーション・プログラム
図表現
{ window,size(200,200),name(hoge),timer(1000).
{draw,name(“obj”),getpic("rect"),size(100,100)}.
{getpic("rect"),$p}:-{getpic("oval"),$p}}.
アトム
size
膜
200
window
size
100
name
obj
100
draw
getpic
rect
:-
getpic
リンク
200
name
hoge
timer
1000
ルール
getpic rect
$p
ルール適
用で状態
が書き換
わる!
oval
$p
1秒後
size
200
name
hoge
timer
1000
200
window
size
100
name
obj
100
draw
getpic
oval
:-
getpic
getpic rect
$p
oval
$p
設計
グラフィック・プログラムの
要求簡略化
•ウィンドウ関連
•描画関連 (描画オブジェクト)
→2種類の要求
膜で状態を表現する
【宣言的】
→宣言型でプログラムを書くことで,状態を表現
【マッピング】
→処理系が状態をマッピング
ウィンドウ膜: ウィンドウ関連の要求
ウィンドウ関連の情報(アトム)を膜に
入れて表現する.
描画膜: 描画オブジェクト関連の要求
描画関連の情報(アトム)を膜に
入れて表現する.
レラティブ膜: 描画膜の補助
描画膜をまとめて操作(移動,回転など)
4
実装
•グラフィック機能部を通常部の処理系から独立
→高速化目的,MVCモデルへの対応
•「特定のタイミング」で状態を通知を受ける
→(通知を受けると描画を行う)
•「特定のタイミング」の決定
→膜を操作するときに,処理系が膜をロックする.こ
のロックを解除(アンロック)する時
•「アンロック」の改良
→膜内に変更が無い(状態チェックのみ)時でも
アンロックが発生していた
→膜内の変更があった時のみ状態取得に改良
→高速化に成功
•アトム(情報)探索の改良
→全アトムを検査していたのをグラフィック関連の
アトムだけを特定して取得・探索できるようにした
→高速化に成功
•I/O機能の実装
→キー入力やマウス入力の受付
5
サンプル
アニメーションプログラム
ルール1本で作成
四角形を円に置き
換わるアニメー
ション
1秒後
ソース
{ window, size(200,200),
name(hoge), timer(1000).
{draw, name(obj),
getpic(rect), size(100,100)}.
ウィンドウ
四角形
/*四角形を円に変更*/
{getpic(rect), $p}:-{getpic(oval), $p}
}.
6
ルール
アニメーションプログラム紹介
バブルソート
ルール数:1本
ドラゴン曲線
ルール数:2本
ギャスケット
ルール数:2本
ギャスケット3D
ルール数:2本
ラインアート
ルール数:12本
タイピングゲーム
ルール数:13本
7
成果
【インターフェース】
入力受付けなどの実装などにより,より
幅の広いアプリケーションの作成も可能
になった.
【宣言型】
宣言型のプログラムで,直感的なプログ
ラムが組めるようになった.
【まとめ】
本研究により静止画や,簡単なアニメー
ションプログラムなどを,容易にプログラ
ムできるようになった.
また,実装した機能はすでに公開・配布
されている.
8
各種膜で意味を持つアトム
ウィンドウ膜内で意味を持つアトム
アトム名
説明
window
ウィンドウ膜の宣言
name(String or int)
ウィンドウ膜の名前、ウィンドウのタイトルになる
size(int, int)
生成されるウィンドウのサイズ(フレームを含む)
bgcolor(int, int, int)
背景色(省略可)
position(int, int)
ウィンドウを生成する位置(省略可)
timer(int)
次の更新までの最短時間[ms](途中変更可・省略可)
keyChar
ウィンドウにキー入力を受け付けるようにする。
値が文字である場合は、文字がkeyChar アトムにリストとして繋がる(省略可)
keyCode
ウィンドウにキー入力を受け付けるようにする。
値はすべて、キーコードでkeyCode アトムにリストとして繋がる(省略可)
描画膜内で意味を持つアトム
アトム名
説明
Draw
描画膜の宣言
name(String or int)
描画膜の名前
getpic(String)
生成するオブジェクトの指定
size(int, int)
生成されるオブジェクトのサイズ
color(int, int, int)
図形・文字列の色(省略可・デフォルトは黒)
position(int, int)
オブジェクトを生成する位置(省略可)
sequence(int)
前後関係の指定.大きい方が手前(途中変更可・省略可)
レラティブ膜内で意味を持つアトム
アトム名
説明
Relative
レラティブ膜の宣言
name(String or int)
レラティブ膜の名前
angle(int)
膜内のすべての描画オブジェクト,レラティブ膜を
原点を中心にint 度右回転させる(省略可)
position(int, int)
レラティブ膜内の原点を変更する(省略可)
処理速度
ルール数2本
【描画あり】 【描画なし】
時間(秒)
時間(秒)
シェルピンスキー
のギャスケット3D
カラー版
18.505
17.040