頭の中で思った作りたいものを、実際に見える形にするには「表現する (Represent)」という作業が必要になる。 そしてそれをコンピュータで作るには、コンピュータが理解できる「表現 (Representation)」を構成しなくてはならない。
というわけで、思ったものを → 表現する方法、について。特に空間の扱いについて、書いていく。
こんな感じで引用チックな文章は補足用なので読まなくてもよい。
この文章は「ものを表現したい人」のための文章であり、mathematician向けのものではない。 とはいえ勿論誤りは訂正したいので何かあれば twitter:@phi16_ の方に連絡してほしい。
空間と変換
形在るものには空間的情報がある。だから私達は「空間の扱い方」を学ぶ必要がある。 特に、多くの空間は単純な空間の変形によって構成されているから、「空間を変形する方法」を知る必要もある。
「空間とは何か」という問に対する回答は複数あるが、一般的かつ説明に十分である「点の集まり」という解釈を採用する。 これによって「空間内の点」という語が意味を持つ。具体例としては「1は『自然数という空間』内の点」という言明がある。 しかしただの点の集まりでは情報が足りない。例えば3次元空間は「3次元に広がった空間」だけど、「点の集まり」と呼んでしまうとそれがわからない。 だから、基本的には何らかの構造を持った空間を扱うことになる。何も構造を持たない空間のことを、集合 (Set) と呼ぶ。
構造を持たないとは言えど、「点と点を区別する」程度の情報は持っている。それが当たり前かどうかはまた別の話であるが。
「空間を変形する方法」はどうあるべきだろうか。空間を変形することで具体的に何が観測できるのか、が問題である。 ここでは空間は点から成っているとしたため、空間のことは点を見ればわかる。「空間を変形する方法」は「点を変化させる方法」となった。
「空間内の全ての点に対して、対応するある空間内の点を与えるデータ」を以って「空間を変形する方法、変換」と呼ぶことにする。 具体例としては「『0から1の実数』の成す空間から『-1から1の実数』の成す空間への変換、」がある。 これは点 に対して点 を対応させるという意味であり、これによって『0から1の実数』全てに対する変換先の定義を行っている。
集合から集合への変換のことを、写像 (Map) と呼ぶ。集合に構造が無いように、写像にもほぼ構造は無いと考えていい。
連続性
私達が最終的に扱いたいような空間、例えば3次元空間とか球とか、にはいろんな構造が入っている。特に多様体 (Manifold)。 そういう構造を私達は潜在的に使いたいと思っているわけだが、それを意識するのは非自明なおはなし。 だから求めた構造に至るまでを辿る必要がある。最初にまず連続性 (Continuity) という構造を意識してみたい。
そのための具体例として、区間 を考える。これは実数の一部だが、実数全体よりも幾分扱いやすい。
という空間は、 以上 以下の全ての実数から成る。即ち 以上 以下の実数は に含まれ、 に含まれてる値は 以上 以下の実数である。
この言明には重複した情報が一切含まれていない。最初の文は「定義」を記し、そこから導かれる2方向の包含関係を後の2文で記述している。
の点の例としては とか などがあるが、これは集合としての側面である。 今回考えたい概念、実数の重要な性質である連続性は、端的に言えば「空間がつながっていること」を表す。 「つながり」を厳密に記述するのは結構難しいことが知られており、その辺は位相空間論 (Topology) の分野である。が、そんなことはどうでもよい。 まず実数こそが連続であるとし、実際に写像が「つながりを保つ / 連続である」かどうかは直感的に判断することにする。実用上は問題ない。 2つの点間の道が、変形によって分断されないことが直感的連続性である。このときこの写像は連続写像 (Continuous map) と呼ばれる。
さて、当然他の任意の異なる実数 に対して区間 が存在する。これは 以上 以下の全ての実数から成るものである。 この時写像 が構成できる。これは確かに写像であり、拡大と平行移動しているだけなので連続写像であると言える。 は に移り、 は に移る。
さらに便利なことに、この写像には逆が存在する。 とすると、対応の逆向きが取れる。ついでに連続写像である。 情報を失うこと無く2空間を相互に連続に変形することができるとき、同相 (Homeomorphic)と言う。任意の2区間 ] は同相である。
1つの空間について「考える」とき、それはその空間と同相な空間について「考える」のと同等である。だから私達は区間を考える際には、 という空間だけを考えてさえいれば良いことになる。
とはいえこれは「連続性」に限った話である。もうちょっと構造が入ったと考えると、それはもはや同じ空間とは言えなくなるかもしれない。「同相」とはまた違う同等性の概念も出てくる。
線形性
実数はまだ深い構造を持っている。その中でも最も重要なのが線形性 (Linearlity) である。
これは単純に言えば「空間がまっすぐ無限に伸びている」ことを示す。無限に、というのが重要で は線形空間 (Linear space) ではない。 定義としては、「加算と伸縮」ができる構造を線形空間と呼ぶ。2次元ベクトルの成す空間は加算も伸縮もできるから線形空間である。
今回は係数体は実数で。
さて、実は線形空間の構造は「次元」によって決定することが知られている。なお有限次元の場合しか考えないことにする。 この時次元というのは「加算と伸縮の組み合わせで任意の点を表せるような最小の空間内の点の数」である。ちょっと具体例を見る。
例えば2次元ベクトル空間を考える。適当に1つ点を取ってみる… だったとしよう。 伸縮によって で表される点は全て表現できるようになった。しかしこれでは は表現できない。 では を追加して組み合わせを考えると、 で 、さらに で が表現できる。 さらに で が表現できるので、任意の点 は で表現できる。つまりこれで十分である。
今まで選択した点の数は2個なので、この空間は2次元であるということになる。このように得られた点の集合を基底 (Basis) と呼ぶ。 基底にはいろんなものがある。それこそ は見た目が最も単純な基底である。
基底によって次元線形空間内の点を表現したいたとき、「基底の各点をある程度伸縮し、それらを加算する」ことで十分であることがわかる。即ち伸縮率を指定する個の実数によって点を表現できる。逆に言えば個の実数の成す空間 は全ての次元線形空間の情報を保持することができる。 先程の「同相」と同じように、情報を失わず且つ線形空間の構造を保ったまま相互に変形できるとき、(線形)同型 (Isomorphic) と言う。任意の次元線形空間は同型である。
は、基底 を選択すると であることより として表現できる。 これは逆向きも勿論構成できる。
今までの議論によって、個の実数の成す空間、次元ユークリッド空間 の重要性が明らかになった。とおもう。
実際によく使われる空間は、局所的に次元ユークリッド空間であるものがほとんどである。例えば球は無限に拡大すれば平面と区別が付かない。 だから形を表現する際には、基本的にユークリッド空間を元にすることになる。 そして実数は、コンピュータでは浮動小数として表現される。精度は適宜気をつける必要があるが。
今までの話は、浮動小数 floatN
をうまく扱うことで形を表現しよう、という道筋の原点である。