平面同士が交わる直線の求め方
ちょっと回りくどいけどまずは3つの平面の交点を求める方程式を出して、そこから2つの平面の直線について求める。
3つの平面
$ (n_1 \cdot p) + d_1 = 0
$ (n_2 \cdot p) + d_2 = 0
$ (n_3 \cdot p) + d_3 = 0
があった時、この平面らが交わる交点$ pは以下の連立方程式を満たす。(成分表示)
$ \left(\begin{matrix} n_{1x} &  n_{1y} &  n_{1z}  \\  n_{2x} &  n_{2y} &  n_{2z}  \\  n_{3x} &  n_{3y} &  n_{3z}  \end{matrix}\right) \left(\begin{matrix} p_x \\ p_y \\ p_z \end{matrix}\right) = - \left(\begin{matrix} d_1 \\ d_2 \\ d_3 \end{matrix}\right) 
$ nの行列を$ Nと表した時、逆行列$ N^{-1}は次のように表示される
$ N^{-1} = \frac{1}{(n_1 \times n_2) \cdot n_3} \left(\begin{matrix} n_2 \times n_3 & n_3 \times n_1 & n_1 \times n_2 \end{matrix}\right) 
よって、交点$ pは以下のように求められる。
$ p = \frac{d_1 (n_3 \times n_2) + d_2 (n_1 \times n_3) + d_3 (n_2 \times n_1)}{(n_1 \times n_2) \cdot n_3}
これを使って2つの平面が交わる直線について求める。
少なくとも直線の方向はお互いの平面に対して垂直となるため、直線のDirection$ vは
$ v = n_1 \times n_2
となる。この時、直線のどこか1点さえ求められばいいので、適当な平面を用意して$ n_1,n_2が交わる点を平面の交点から求める。ここで法線を$ v、Offsetを$ 0とする平面を用意して、先ほどの公式から
$ p = \frac{d_1 (v \times n_2) + d_2 (n_1 \times v)}{v^2}
というように求められる。こうして交わる直線$ p(t) = p + tvが得られる。