2019.09.07 おれたちはアフィン空間を選んだ

iOSDCという日本で一番大きいiOSの開発者向けイベントがある。会社が金を出してくれたので参加してきた。おれはiOSが書けないが、iOSの技術詳細を知らなくても聞ける話が沢山あるので楽しめた。

タートルグラフィックスをSwiftで書くという発表は発見があった。タートルグラフィックスは、亀を何秒まっすぐ進めるかと何度方向転換するかという2つの命令でお絵かきをすることだ。

話を聞きながら、学部一年の頃マインドストームをプログラミングで動かす講義があったのを思い出した。まだプログラミングに慣れ親しむ前のぺーぺーの18歳のことである。課題として似顔絵を書けというのがあった。おれたちのチームは車型ロボをまず四角に走らせ、次にその四角の中に点を二つと棒線を引っ張って、何とか顔っぽいものを書いた。つまりタートルグラフィックスをしていたのだ。

一方で優勝チームは紙の上にペンを垂直で固定しペンをストロークする開始と終点の座標位置を指定することで絵を描いていた。優勝チームのロボは、当然、僕らのガタガタと紙の上を走らせるロボより、精度の高い似顔絵を書いた。当時は技術力が低い自分に情けなくなったが、いま思えばそもそも「紙の上に絵を描く」という課題を扱う数学的な空間から違ったのである。

どうちがうか。一般的な2Dグラフィックスでは座標の計算に数学的知識が必要になる場合があるが(三角形を描くことを考えて欲しい。三平方の定理を使わないとすべての頂点の座標が計算できない)、タートルグラフィックスでは自身がどう動くかをプログラミングする。つまり視点が違うのだ。2Dグラフィックスは客観だがタートルグラフィックスは主観になる。そしてこれは数学的には絵を描くという問題を二次元空間かアフィン空間で扱うという違いがある。

課題を解決するには、既に解法が知られている問題として取り扱えることを考える。これをモデル化と読んでいて、おれたちはモデルとしてアフィン空間を選んだが、優勝チームは二次元空間を選んだが、最適なモデル化は二次元空間だった。