3次元CADを支えるオイラーの公式

突然だけど、僕が3次元CADの世界に入って最も感動した式を紹介してみよう。
v - e + f = 2(1 - g)
えっと、説明が面倒だからとりあえずg=0としてしまうよ。
v - e + f = 2
これはオイラーの公式といって、vは頂点(vertex)の数、eは辺(edge)の数、fは面(face)の数だ。(オイラーの公式というとe^{i\theta}=\cos\theta+i\sin\thetaが有名だけど、それとは違うやつね。)
「どゆこと?」という方、下のような立方体で考えてみよう。

立方体は頂点が8個(v=8)、辺が12本(e=12)、面が6枚(f=6)だよね。これをオイラーの公式に当てはめてみると・・・
v-e+f=8-12+6=2
ほらっ!成り立っちゃうんです!
じゃあ今度は、この立方体の面を全部2つに割って、三角形にしてしまいましょう。こんな感じで。

頂点の数は変わってないから、v=8のままだ。
辺の数は、6枚の面全てに対角線となる辺が増えているから、e=12+6=18だ。
面の数は、6枚の面全てが2つに割れているから、f=6\times 2=12だ。
これをオイラーの公式に当てはめると・・・
v-e+f=8-18+12=2
ほらっ!やっぱり成り立っちゃうんです!右辺は2なんです!


さあ、ここで v, e, f をそれぞれ x, y, z 軸に割り当てた3次元空間を想像して欲しい。その空間では、オイラーの公式は平面を表していることが分かるだろうか。つまり、立体に対して面を割ったり辺を切ったりする操作をどれだけ行っても、その平面から立体がはみ出すことはないのだ。コレを知ったとき僕は結構感動してしまった覚えがある。「スゲーッ、オイラーさんスゲーよ。位相幾何学ってスゲーよ。」って感じ。
この平面からはみ出さない操作を「オイラー操作」といって、3次元CADのソリッドカーネルの根幹を担っている重要な操作だ。まあ、あまりオイラー操作を意識する機会は少ないんだけどね。(数学の人は「同相写像」とかって言うかも)


ちなみに、冒頭でg=0としてしまったけど、このgというのは穴の数を表している。下の図のように浮き輪みたいな形をした立体では、g=1となるのだ。


# ふと、最近CADのことを全く書いてないことに気づいたので、これからはもう少し書いてみようと思い立った。えっと、このブログではCADといったら基本的には機械系の3次元CADを指すと思ってください。