第30回 作品の解析

プログラミング言語を学ぶ方法の一つに、既存のプログラムを解析する、というものがあります。それによって、アルゴリズムや、効率のよいプログラムの書き方を学ぶのです。もし、題材がすぐれたプログラムであれば、学ぶところは多いでしょう。すぐれたプログラムとは

・構造が明快である

・変数が何を表すかがわかりやすい

プログラムです。

かつて、パソコン黎明期の頃、BASIC言語(高校の教科書に載っている言語)でのプログラミングがさかんに行われていましたが、どうなっているのかわけのわからいプログラムのことを「スバゲッティプログラム」と呼んでいました。スパゲッティがからんでいるように、何がどこにつながっているのかわからない、という意味です。その後、プログラミングは「構造化」「オブジェクト指向」が進み、現在のC言語やJAVAに至っています。初期のBASIC言語は「構造化」には向かないと言われていましたが、そのBASICで明快な構造的プログラミングをしている人がいました。そのような作品に出会えるのは幸運なのかもしれません。

さて、Cinderella.2も、マニュアルだけではなく実際の作品で学ぶとよいでしょう。図形がどのように作られているのか、どのようにしてコントロールされているのか。他人の作品を解析するのはなかなか骨の折れる仕事ですが、パズルを解くような楽しみがあります。

次のような作品を題材に、解析を進めてみましょう。

次の作品は、2つのベクトルの和で表されるベクトルをシミュレートするものです。係数s,tの和が常に1になるように設定されています。スライダを動かすと係数sの値が変化し、ベクトルが動きます。(この図はスクリーショットなので動きません)

まず、図がどのような要素からできているかを調べます。表示されていない要素があるかも知れません。そのためには、表示メニューから「式による表示」を選びます。

これにより、点 Oは自由点で原点にあること、OとAを線分で結んでいる(線分a)こと、などがわかります。順に見ていくと、がめに表示されていない要素があることがわかります。

まず、点C,Dです。しかし、よく観察すると、この2点はy座標が同じで、直線で結ばれていることがわかるでしょう。そして、点Sが直線上の点となっています。つまり、直線CDはスライダで、点Cと点Dは非表示になっているのです。

そこでこの「式による表示」で点Cをクリックし、インスペクタを開いてみてみましょう。すると、「ラベルをつける」のチェックがはずされていることがわかります。このチェックを入れてやると、画面上に点Cが出てきます。点Cはスライダの0を表す点だったのでした。

この、「式による表示」は、単なる要素の一覧表ではありません。作図の順番も示しています。この例では、まず原点をとり、次に線分OAをとり(その結果点Aができた)、次に線分OBをとり、直線CDを引き、直線CD上に点をとっていることがわかります。この手順だと、この点はEになるはずです。ということは、ここで点Eの名前をSに変えたのでしょう。まてよ、シンデレラはAから順に名前を付けていくはずです。ということは、最初に点Aを原点にとり、すぐに点Oに名前を変えたのでしょうね。

Cinderella.2は、点は大文字Aから、線は小文字aから順に名前を付けていき、名前を変更したり削除したりすると、次の要素をその名前にします。試しに、点Aを消去ツールで消して、新たに「点を加える」

ツールで点を加えてみましょう。するとAという点ができ、「式による表示」の最後に追加されます。

これで、図形要素がどのように作られたかがその手順とともにわかります。ひとつわからないのは、大きく表示されている式です。文字要素は、スライダの数字0,1と (s+t=0) という文字です。とすれば、この式表示は図形要素ではないことになります。実際、文字列として表示しようにも、このような矢線を上に書く表現はできません。では、この式は背景図として作られたのでしょうか。しかし、背景図にしては方眼の具合が変です。式による表示で要素をチェックしていくと、これが点Eであることがわかります。つまり点Eに図形を貼り付けたのでした。

次はCindyScriptです。「スクリプト」メニュー(Build 1123ではScripting)からCindyScriptを開きます。コードが書かれているスロットはすぐわかります。そこを開くと、次のようになっています。

この位のコードであれば簡単に読めるでしょう。スライダの位置からssを計算します。これが、画面上のsの値でしょう。これをdrawtext関数で表示しています。組み込み関数は青で表示されます。また、この例にはありませんが、ユーザーが定義した関数は紫色で表示されます。

あとの4行でP,F,Gの位置を計算しています。計算と同時にその位置に点が動きますので、スライダを動かすとそれにつれてベクトルの図が動くことになります。

この例は簡単なもので、特別なテクニックも見当たりません。しかし、作品によっては作図のテクニックとして学ぶべきものや、関数の使い方、論理構造の組み立てかたとして参考になるものもあることでしょう。ギャラリーやMatheVitalの作品をダウンロードして解析してみるのもよいでしょう。