同次座標

提供: メモ帳@fmaj7b5.info
移動: 案内検索

目次

何がいいの?

よく知っている幾何学だと、「平行でない2直線は1点で交わる」ことになっている。けど、平行な時だけ仲間はずれにするのは可哀想だということで、「平行な2直線も1点で交わる」ことにしちゃったものを表す時に使うのが同次座標(斉次座標)。 だから、点や直線を考える時に余計な事を考えなくても良くなるという便利な物。

イメージとしては、直線の式

  y = a x + b
\boldsymbol{y}軸に平行な直線を表せないのに対して、

  a x + b y + c = 0
だと例外なく表せる、みたいな感じ。

普通の座標と同次座標を対応させる

2次元の場合、普通の座標は変数2個で表現するけど、同次座標はもう一つ余分に使う。

  (x, y) \mapsto (x, y, 1)
ただし、三つの成分が全て0になることは無いとする。 で、同次座標(x_1, x_2, x_3)から普通の座標への変換は以下のように決めておく

  (x, y) = \left( \frac{x_1}{x_3}, \frac{x_2}{x_3} \right)

同次座標は成分の比が重要なので普通の座標とどう対応づけても関係無いけど、途中で変えると面倒な事になりそう。 なので、ここでは3番目の成分で他の成分を割った物が普通の座標になるとしておく。

この決め事からも自明だけど、同次座標に0で無い定数を掛けても同じ点を表す。

  \begin{bmatrix}
    x_1 \\ x_2 \\ x_3
  \end{bmatrix}
  \propto
  s \begin{bmatrix}
    x_1 \\ x_2 \\ x_3
  \end{bmatrix}
  \mapsto
  \begin{bmatrix}
    s x_1 / s x_3 \\ s x_2 / s x_3
  \end{bmatrix}
  =
  \begin{bmatrix}
    x_1 / x_3 \\ x_2 / x_3
  \end{bmatrix}
ただし、\proptoは定数倍を除いて等しい事を表すとする。

ざっくりいうと、原点を通る3次元空間の直線s (x_1, x_2, x_3)を考えて、x_3 = 1で表される平面と交わるところが対応する2次元の座標ということになる。 つまり、折角3個の変数を使っているのに意味があるのは平面上だけで、あとはムダになる。 このムダを埋めてくれるのが次の話。

無限遠点

上記のように、3番目の成分で割った物が普通の座標に対応することにした。では、3番目の成分が0ならどうなるか。 これは普通の座標には対応しない雰囲気がある。ここで、

  \frac{1}{x_3}
  \begin{bmatrix}
    x_1 \\ x_2
  \end{bmatrix}
を考えてx_3を小さくしていくと、原点から(x_1, x_2)の方向にどんどん遠のいていく事が分かる。 つまり、これは無限遠の1点を表してるはず。

というわけで、

  • x_3 \neq 0:普通の座標
  • x_3 = 0:無限遠点

を表すことが分かった。 ただし、これはあくまでも普通の座標に変換したあとの話で、同次座標で表している間は気にしなくても良い。 何も考えずに普通の点と無限遠の点を扱えるというのがここのポイント。

直線

同次座標では、直線は次のように表す。

  l_1 x_1 + l_2 x_2 + l_3 x_3 = 0
まあ、直線の方程式そのものだね。この式は右辺が0なので、任意の0で無い定数を掛けてもやっぱり同じ直線を表す。

ベクトルっぽく書くと、こんな感じ。

  \begin{bmatrix}
    l_1 & l_2 & l_3
  \end{bmatrix}
  \begin{bmatrix}
    x_1 \\ x_2 \\ x_3
  \end{bmatrix}
  = \boldsymbol{l}^\text{T} \tilde{\boldsymbol{x}}
  = 0
ただし、\tilde{\boldsymbol{x}}\boldsymbol{x}の同次座標を表す。

2点を通る直線

\tilde{\boldsymbol{x}}_1, \tilde{\boldsymbol{x}}_2を通る直線は、次のように計算できる。

  \boldsymbol{l} = \tilde{\boldsymbol{x}}_1 \times \tilde{\boldsymbol{x}}_2
まさかの外積。これが上式を満たす事は適当に確認できる。

2直線の交点

\boldsymbol{l}_1, \boldsymbol{l}_2の交点は、次のように計算できる。

  \tilde{\boldsymbol{x}} = \boldsymbol{l}_1 \times \boldsymbol{l}_2
またしても外積。これがそれぞれの直線上にある事も簡単に確かめられる。

  • 2点 → 直線
  • 2直線 → 点

ということで、点と直線が双対な関係にある。

平行線の交点

平行な線:

  \begin{array}{l}
    \boldsymbol{l}_1 = [ a \ b \ c_1 ]^\text{T} \\
    \boldsymbol{l}_2 = [ a \ b \ c_2 ]^\text{T}
  \end{array}
を考える。

交点\tilde{\boldsymbol{x}}は上でみたとおり、次のようになる。

  \begin{align}
    \tilde{\boldsymbol{x}} &\propto \boldsymbol{l}_1 \times \boldsymbol{l}_2 \\
      &=
    \begin{bmatrix}
      b c_2 - b c_1 \\
      c_1 a - c_2 a \\
      a b - a b
    \end{bmatrix}
    \propto
    \begin{bmatrix}
      -b \\ a \\ 0
    \end{bmatrix}
  \end{align}
3番目の成分が0である事から、無限遠点である事が分かる。 こんな風に平行な線も、そうでない線も同じように扱えるのが同次座標の魅力。

ちなみにこの交点、なんと・・・と言うべきか、当然と言うべきか直線と平行な(直線が伸びる)方向を表している。

2次曲線

普通の座標での2次曲線:

  a x^2 + 2 b xy + c y^2 + 2 d x + 2 e y + f = 0
(x, y) \leftarrow (x_1/x_3, x_2/x_3)とすると、以下を得る。

  a x_1^2 + 2 b x_1 x_2 + c x_2^2 + 2 d x_1 x_3 + 2 e x_2 x_3 + f x_3^2 = 0

整理すると、

  \begin{bmatrix}
    x_1 & x_2 & x_3
  \end{bmatrix}
  \begin{bmatrix}
    a & b & d \\
    b & c & e \\
    d & e & f
  \end{bmatrix}
  \begin{bmatrix}
    x_1 \\ x_2 \\ x_3
  \end{bmatrix}
  =
  \tilde{\boldsymbol{x}}^\text{T} C \tilde{\boldsymbol{x}}
となる。

この式で表される曲線は、円錐をある平面で切断した時の断面に現れる曲線になるため、円錐曲線と言う事もあるらしい。

接線

\tilde{\boldsymbol{x}}が2次曲線上(=\tilde{\boldsymbol{x}}^\text{T} C \tilde{\boldsymbol{x}} = 0)にある時、

  \boldsymbol{l} = C \tilde{\boldsymbol{x}}
はその点を通る2次曲線の接線である。