LIFE LOG(MochiMochi3D)

MochiMochi3D

3D関係の記事を書きます

同次座標系の同次(Homogeneous)って何?

3DCGでよく使われている同次座標系の同次の意味について気になったので、調べてなんとなくまとめた記事です。著者は数学をちゃんと学んでいない人間なのであまり言葉遣いが正確ではないかもしれないのでご留意ください。

同次座標系(Homogeneous Coordinate)への疑問

位置座標(x,y,z)に対してもう一つ次元を増やして(x,y,z,1)にしたり、方向ベクトルだったら(x,y,z,0)にするとかで、3次元の座標に対してもう一つ値を追加して4次元の座標を使うことはCGプログラミングをしている人ならおなじみだと思います。こうして作られた4次元の座標系というのを同次座標系と呼びます。詳しい定義は後述しますが、こうした次元を増やすと平行移動といった変換をまとめて1つの行列式の計算としてあらわすことができたり(Affine変換)、位置ベクトルと方向ベクトルの区別をつけれたりと何かと便利な座標系です。

私は精々そうゆう便利な座標系があるんだなーという適当な認識でいたのですが、最近に同次座標系の英訳が「Homogeneous Coordinate」というのを知りふと疑問が浮かびました。Homogeneousといえば一様媒質とかで出てくるように「均一」「同種」といった「同じ種類のもので構成されていること」を指すイメージだったのですが*1、なんだかあんまり関係性がなさそうな感じの名前しているなと思いました(明らかに数学用語なので一般的な意味で考えるのは良くないと思いますが)。

そういう経緯で同次座標系という名前にある「同次(Homogeneous)」ってどういう意味でつけられているのかちょっと調べてみました。

数学におけるHomogeneousとは

"Homogeneous math"で検索してみたところどうやらHomogeneousは多項式において使われるもので、全ての項の次数が等しいことを示す言葉のようです。例えば、

 \displaystyle{
8x^2 + y^2 +3z^2
}

のような多項式があった時、すべての項の次数は等しく2であるため、この多項式Homogeneous Polynomialであるといいます。一方で次数が合わない場合というのはこんな感じの式です。

 \displaystyle{
8x^2 + y^2 +3z
}

全部の項が同じという所は確かにHomogeneousという言葉が使われるのは納得です。日本語ではHomogeneous Polynomialは斉次多項式、または同次多項式という名称が使われており、斉という漢字が揃えることを意味するので「斉次」も「同次」も次数が同じということを表す言葉としては適切と感じます。以後、ここでは同次座標系の名称に合わせて同次多項式と呼びます*2

同次多項式の性質として、 n個の変数 x_1,x_2,...,x_nである多項式 P^h(x_1,x_2,...,x_n) k次の斉次性を持つとき、0でない実数 \lambdaに対して以下の性質を持ちます。

 \displaystyle{
P^h(\lambda x_1, \lambda x_2,..., \lambda x_n) =\lambda^k P^h(x_1,x_2,...,x_n) \tag{1}
}

先ほどの同次多項式 \lambdaを使って調べてみると、確かにこれは成立します。

 \displaystyle{
8(\lambda x)^2 + (\lambda y)^2 +3(\lambda z)^2 = \lambda^2(8x^2 + y^2 +3z^2)
}

一方で同次でない多項式では(1)の式を満たすことができません。項の次数が合わないとどうにも係数\lambdaを括り出せないためですね。

 \displaystyle{
8(\lambda x)^2 + (\lambda y)^2 +3(\lambda z) = \lambda (8\lambda x^2 + \lambda y^2 +3z)
}

このような形で多項式に対してHomogeneousという性質が考えられています。また、これを関数に拡張して、ある関数 fがベクトル \bf{v}と0ではないスカラー \lambdaについて

 \displaystyle{
f(\lambda \bf v \rm) = \it \lambda^k f \rm(\bf{v} \rm)
}

という性質を持つとき、この関数をHomogeneous Function(斉次関数、同次関数)と呼びます。ここまでくるとなんだか同次という意味もちょっと分かりづらい感じになってきます。

同次化 Homogenization

同次座標系に関わる操作としてHomogenization (同次化)があります。n変数の非同次多項式 P(x_1,x_2,...,x_n)があり、その多項式の最大次数が kとする時、もう一つ変数 wを導入した同次多項式 P^h(x_1,x_2,...,x_n,w)を以下のように作ることができます。

 \displaystyle{
 P^h(x_1,x_2,...,x_n,w) = w^k P(\frac{x_1}{w},\frac{x_2}{w},...,\frac{x_n}{w}) \tag{2}
}

このような新しい同次多項式P^hを作る操作のことを同次化と呼びます。例えば3変数の非同次多項式

 \displaystyle{
P(x,y,z) = 5x^3 + 2y^2 + z
}

に対して(2)式をもとに同次化を行ってみると、最大次数は最初の項の3なので

 \displaystyle{
 P^h(x,y,z,w) = w^3 \lbrace 5(\frac{x}{w})^3 + 2(\frac{y}{w})^2 + (\frac{z}{w}) \rbrace = 5 x^3 + 2 y^2 w + z w^2
}

という形で得ることができます。得られた多項式を見てみるとちゃんと各項の次数が同じであり、同次多項式になっていることがわかります。

同次座標系(Homogeneous Coordinate)

以上でHomogeneousについての話をしたので、次は同次座標系がそれとどんな関係があるか見ていきます。まずは同次座標系そのものの定義を確認していこうと思います。

あるN次元デカルト座標系に対してもう一つスカラーを加えてN+1次元座標系を考えます。この時、N次元座標 (x_1,x_2,...,x_n)(N+1)次元座標 (x_1',x_2',...,x_n',w)を次のような対応付けを行います

 \displaystyle{
(\frac{x_1'}{w},\frac{x_2'}{w},...,\frac{x_n'}{w}) = (x_1,x_2,...,x_n)
}

こうして作られた(N+1)次元座標系を同次座標系と呼びます。同次座標系ではたとえ座標 \bf{v'}に対してスカラー倍して \lambda \bf{v'}としても、指し示すデカルト座標は変化しません。

 \displaystyle{
(\lambda \frac{x_1'}{\lambda w},\lambda \frac{x_2'}{\lambda w},...,\lambda \frac{x_n'}{\lambda w}) = (x_1,x_2,...,x_n)
}

そのため、同次座標系では座標のスカラー倍は同じものとみなし、デカルト座標の点は同次座標系では原点を通る直線に対応することになります。

それで今回の話はこれの何がHomogeneousなのかってことです。いったん話を簡単にするため、2次元デカルト座標 (x,y)に対して3次元の同次座標系 (x',y',w)を考えることにします。

 (x,y)平面上で何らかの多項式で表される曲線を f(x,y) = 0と置き、多項式 f(x,y)は非同次であるとしておきます。ここで、非同次多項式は一つ変数を増やすと同次多項式が得られる同次化を思い出し、同次座標系で追加される wを使って同次化を試みます。

 f(x,y)の最高次数は kとしておいて、 wを使うと f(x,y)は次のような同次多項式 f^h(x,y,w)を得ることができます。

 \displaystyle{
f^h(x,y,w) = w^k f(\frac{x}{w},\frac{y}{w})
}

ここで同次座標系の定義と見比べると、 x / w, y /wは同次座標系の x' ,y'と見なすことができるため、次のように同次座標 (x',y',w)を用いて

 \displaystyle{
f^h(x',y',w) = w ^k f(x',y')
}

と得られます。 fは条件式として与えられていたわけですから、こうして得られた同次多項式 f^hも同様に同次座標系上での条件式となります。

 \displaystyle{
f^h(x',y',w) = 0
}

このことから、同次座標系はデカルト座標上の曲線 fを同次化して変換した同次多項式 f^hが存在する座標系であるということがわかります。

また、同次座標はスカラー倍しても変わらないものとして扱うことを考えると、座標をスカラー倍したとしても曲面(3次元なら)を表す条件式 g(x,y,w) = 0スカラー \lambdaに対して同じ条件を保つ必要があります。つまり、非0のスカラー \lambdaに対して

 \displaystyle{
g(\lambda x, \lambda y, \lambda w) = g(x,y,w) = 0
}

という式が成立しないと同次座標系では曲面を表現できません。これは関数 gが同次関数である場合、この性質を満たすことができます。(証明してないですが多分非同次だとだめだと思います)

 \displaystyle{
g(\lambda x, \lambda y, \lambda w) = \lambda g(x,y,w) = g(x,y,w)= 0
}

こうしたことを見ると、同次座標系は同次性というもので作られていることがわかります。そもそも「同次」自体がスケーリングに対してあんまり変化しない性質的な感じで扱われているのを見ると、同次座標系の性質だけ見ても関係性がなんとなく見えてくる感じがあります。

おわりに

なんとなくで始めた調査でしたが、予想に反してなかなか同次座標系ってものが数学的に深めな感じで調べてると射影幾何とかにつながってくるので面白いなと思いました。3DCGを触っていてここまで意識したことがないのを考えると、上辺だけをなぞっていたんだなという感じになりました。

正直難しかったので本当に書いてあることが正しいのかわかんなくなってきましたけど、雰囲気はとりあえずつかめる感じにはなったかなと思います。適当な感じになったので、ちゃんと数学を学びたいですね・・・(幾何学とか)

参考文献

Homogeneous polynomial - Wikipedia

Homogeneous coordinates - Wikipedia

座標を用いた射影平面の定義 | 高校数学の美しい物語

射影平面についての導入的な話 - すうがくなどについてのメモ

*1:consisting of parts or people that are similar to each other or are of the same type, Cambridge Directionaryから引用

*2:一般的には斉次多項式の方が使われている気がします