平面同士が交わる直線の求め方
#数学
ちょっと回りくどいけどまずは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が得られる。