DOSEIの日記

技術メモ+日常ログ

球面上の幾何計算 (1)

ここでは、球面上の幾何オブジェクトに対して、その間の演算を定義する。ついでに、コンピュータで実装する場合の表現の例をあげる。

球面上で考える基本的な対象の一つは点である。この点のすべての集合が S^2 である。
点 p に対して、球のちょうど反対側にある点を対蹠点といい、 p であらわす。

  • p̿ = p (冪等性)
内部表現

3次元数ベクトル。球を3次元ユークリッド空間の埋め込みと考え、その半径を1とする。その中心に直交基底を置いたときの、球面上の座標である。なお、コンピュータ計算の効率から、正の定数倍を同値とする。

p: p = (px, py, pz)

このとき、対蹠点 p は、

p: −p = (−px, −py, −pz)

直線

球面上の直線は、いわゆる大円である。ここでは、この大円は球面上の部分集合で、向きが付いていると考える。ある直線 l に対して、その逆方向の直線を l と書く。

  • l̿ = l (冪等性)
内部表現

原点を通る平面と球面との交差部分である。任意の平面はその面に直交するベクトル n によって nx = 0 を満たす x の集合とあらわすことができるので、これを内部表現とする。このような n は、非零定数倍の自由度があるが、設定した直交座標が右手系の場合、その直線の向きを の向きに対する右ねじ回転方向とする。同じ方向を表す直線の内部表現は、正の定数倍の自由度がある。

l: l = (lx, ly, lz)
l: −l = (−lx, −ly, −lz)

2点を通る直線

異なる 2 点 p, q を通る直線は、 q ≠ p の時、方向を除いて一意に定まる。このとき、 p, q は、大円を大きさの違う部分に分割する。p から q に最短経路で向かう方向の直線を p ∨ q であらわす。

以下の性質が成り立つ

  • p ∨ q = pq = q ∨ p = q ∨ p = q ∨ p
内部実装

p, q の位置ベクトルが張る平面と球面の交差である。したがって、この平面の法線が直線を表す。この法線は外積(クロス積)でもとまる。

p ∨ q: p × q

2直線の交点

球面上の異なる 2 つの大円(直線)は、2つの交点を持つ。2直線 l, m が l ≠ m の時、交点は、 l の進む方向に対して右から左に交差する点と、逆向きに交差する点がある。前者を、 l ∧ m であらわす。

  • l ∧ m = lm = m ∧ l = m ∧ l = m ∧ l
内部実装

2直線に対応する原点を通る2平面に対して、その交差部分が交点となる。したがって、これも外積で求まる。 2つの交点のうち、l, m の向きによって、上記の定義の通り点が定まる。

l ∧ m: l × m

点と直線の位置関係

直線 l は、球面を2分割する。 l の向きに対して左半球を lL, 右半球を lR であらわす。点 p は l, lL, lR のいずれかに含まれる。

内部実装

右手系の場合、
p ∈ lLpl > 0
p ∈ l ⇔ pl = 0
p ∈ lRpl < 0

内部実装についての注

ここでは、点と直線とを同じ3次元ベクトルで表現した。この場合、高次元へ同じような表現での拡張は難しい。たとえば、3次元空間幾何で、点と面はそれぞれ3次ベクトルで表現する(ようするにそれぞれを3次元ベクトル空間の元として考える)ことができるが、直線は無理( Plücker 座標のような高次元ベクトル空間を持ってくるしかない)。なお、このように 2 次元では、 0 次元と1次元の部分集合が、 3 次元では 0 次元と 2 次元の部分集合が互いに似た表現を持つのは、きっと偶然ではなく、おそらく外積空間的な話のホッジスタオペレイタ的な話と関係しているに違いないが、詳細は略。
Oriented Projective Geometry (J. Stolfi)*1 などでは、点、直線の内部表現として、 1 × 3 行列、 2 × 3 行列を対応させ、より高次に表現を拡張できるようになっている(ただし、この論文は球面幾何ではないが)。ただし、相等や退化などの判定は行列式の計算が必要となるなど、繁雑になっていく。逆に空間全体などの表現を得られるため、場合によっては便利なリッチな幾何となる。
したがって、高次球面幾何を構成する場合には、このような表現を採用する必要があるが、ここではそこまでは考えない(めんちいから)。