問題を定義する
- a*x + b*y + c*z + d = 0 で表される平面と
- (x1, y1, z1) から (x1 + dx, y1 + dy, z1 + dz) への線分
の交点が (x1 + t*dx, y1 + t*dy, z1 + t*dz) となる t を求める。
問題を整理する
(x1 + t*dx, y1 + t*dy, z1 + t*dz)
を平面の式に当てはめて
a*(x1 + t*dx) + b*(y1 + t*dy) + c*(z1 + t*dz) + d = 0
a*x1 + t*a*dx + b*y1 + t*b*dy + c*z1 + t*c*dz + d = 0
t*a*dx + t*b*dy + t*c*dz = - a*x1 - b*y1 - c*z1 - d
t*(a*dx + b*dy + c*dz) = - a*x1 - b*y1 - c*z1 - d
両辺を (a*dx + b*dy + c*dz) で割って
t = (- a*x1 - b*y1 - c*z1 - d)/(a*dx + b*dy + c*dz)
例外的な状況
- 平面と線分が平行であるときは交点が無い。
実装
というわけで以下のようなコードになる。