何を分けたいのか
Instant Geometry では、画面に見えている図形をそのまま一つの大きなデータとして保存しない。
画面には、点、線分、角、面、立体、ラベル、色、入力欄、ドラッグ状態、選択状態などが同時に見えている。しかし、それらは同じ種類の情報ではない。
数学として意味を持つものは正本に入れる。表示のためだけのものは presentation に入れる。ユーザーが今どこを触っているかという状態は、正本には入れない。
Geometry Object
Geometry Object は、Instant Geometry が数学的な対象として直接扱う最小単位である。
現在の draw 憲法では、基本の object kind は6つだけである。
- point
- segment
- angle
- arc
- area
- volume
点は場所を持つ。線分は2つの点を結ぶ。角は2本の ray からできる。弧は円や曲線の一部を表す。area は平面上の領域を表す。volume は空間内の領域を表す。
ここで大事なのは、三角形や円や球を、最初から単一の Geometry Object として見ないことである。
三角形は、3つの点、3つの線分、3つの角、1つの面領域を持つ。球は、中心点、半径、表面、内部の体積領域を持つ。これらを一つの object に押し込めると、部品の意味や関係が曖昧になる。
Figure Model
Figure Model は、名前付きの図形を表すためのモデルである。
三角形、円、扇形、正方形、球、円柱、角柱などは、単なる area や volume ではない。それらは、いくつかの Geometry Object と、それらの関係から成り立つ数学的なまとまりである。
たとえば三角形は、頂点、辺、内角、領域を持つ。円は、中心、半径、円周、円内部の領域を持つ。球は、中心、半径、球面、内部領域を持つ。
Figure Model 自体は Geometry Object ではない。直接クリックされる object でもない。ユーザーが画面で選ぶときは、多くの場合、代表となる area や volume が選ばれる。その代表 object の modal が、Figure Model に基づいて関連する情報をまとめて表示する。
Figure Model は図形の名前と構造を持ち、Geometry Object はその図形を構成する部品を持つ。
Relation Model
Relation Model は、object や figure のあいだに成り立つ数学的な関係を表す。
点が円周上にある。2つの線分が平行である。2つの角が等しい。三角形が円に内接している。2つの三角形が相似である。
これらは、図形そのものではない。関係である。
Relation Model は、単なる検査式ではない。教材上の意味を持つ名前、参加者、成立条件、必要なら低レベル relation への展開規則を持つ。
たとえば「三角形が円に内接する」という関係は、そのまま高レベルの関係として扱える。同時に、必要なら「A が円周上にある」「B が円周上にある」「C が円周上にある」という低レベル relation に展開できる。
Page と SceneModel 候補
現時点では、SceneModel という名前の正式な文書はない。
ただし、SceneModel が担いそうな役割はすでに現れている。既存文書では、それは draw page、page canonical data、page model relations という言葉で分散して書かれている。
draw page は、単一の object ではない。1つのページは、ページ情報、カード情報、入力欄、Geometry Object、Figure Instance、Relation Instance、設定、依存関係、表示情報を持つ。
この全体を、人間の言葉で言えば「1つの場面」である。
もし今後 SceneModel という名前を採用するなら、それはページに存在する Geometry Object、Figure Instance、Relation Instance、入力欄、presentation、page 固有の構成ルールを束ねる上位モデルになる。
ただし、drag state、hover state、現在の選択状態のような一時的な UI 状態は、SceneModel の正本には入れないほうがよい。
functionalArea
functionalArea は、現在の draw 憲法では Geometry Object kind に入っていない。
憲法には、functionalArea、orientedArea、orientedVolume、vector、function は draw 憲法の範囲外であり、別体系で扱う、と書かれている。
これは、関数ページに面積表示が存在しないという意味ではない。実装上は、関数と x 軸に挟まれる面積や、二次関数と直線に囲まれる面積を表示するページがある。
しかし、それらはまだ functionalArea という canonical object kind として定義されているわけではない。
今後 functionalArea を定義するなら、通常の area との違いを明確にする必要がある。通常の area は、線分や弧などの境界 object によって囲まれる平面領域である。一方で functionalArea は、関数、区間、符号、積分、座標軸、グラフ同士の上下関係などに依存する可能性がある。
presentation
presentation は、数学的な正本ではなく、見せ方である。
色、透明度、z-index、ラベル位置、表示・非表示、線の種類などは presentation に入る。これらは教材として重要だが、図形そのものの同一性ではない。
たとえば、同じ三角形を青く塗っても赤く塗っても、三角形としての identity は変わらない。ラベルを少し動かしても、点や線分の数学的な意味は変わらない。
逆に、線分の長さ、角度、点の座標、どの線分がどの面の境界か、どの点が円周上にあるか、といった情報は presentation ではない。これは正本側に属する。
この設計の読み方
まず、Geometry Object がある。これは点、線分、角、弧、面、体積という部品である。
次に、Figure Model がある。これは部品を束ねて、三角形、円、正方形、球のような名前付き図形として読むための層である。
その次に、Relation Model がある。これは部品や図形のあいだに成り立つ関係を読むための層である。
最後に、Page または将来の SceneModel がある。これは、ある教材ページに登場する object、figure、relation、入力、表示をまとめる場面全体である。
実装のための表や ID は、この読み方を機械に伝えるためのものにすぎない。
Instant Geometry は、画面に見えるものを一枚絵として保存するのではなく、数学的な部品、名前付き図形、関係、場面、見せ方に分けて理解しようとしている。