2平面の交線

平面F1、平面F2があったときに、その交線を求めるには?
要素は3次元空間内に存在するものとします。

解説

平面F1を
 a1 x + b1 y + c1 z = d1 ・・・式①
平面F2を
 a2 x + b2 y + c2 z = d2 ・・・式②
とし、
交線Lを交線の通る点A、交線の方向ベクトルe、媒介変数t、を用いた、
P = A + t e
として求めることとします。

交線の方向ベクトルe は、2つの平面の法線ベクトルと垂直なベクトルです。
2つのベクトルと垂直なベクトルは、外積計算により求まります。
e = [ b1 c2 - c1 b2 c1 a2 - a1 c2 a1 b2 - b1 a2 ]
このベクトルの各成分は、後で使用するので、
Xe = b1 c2 - c1 b2
Ye = c1 a2 - a1 c2
Ze = a1 b2 - b1 a2
とします。

次に、交線が通る任意の1点Aを求めます。
これは、言いかえると、式①、式②をとともに満たすをx y z の組を見つけることです。

連立3元1次方程式を、z = 0 として、連立2元1次方程式に見立てて、x、yを求めます。
a1 x + b1 y = d1 ・・・式③
a2 x + b2 y = d2 ・・・式④
式③、式④より
x = ( d1 b2 - d2 b1 ) / ( a1 b2 - a2 b1 )
 = ( d1 b2 - d2 b1 ) / Ze
y = ( d1 a2 - d2 a1 ) / ( b1 a2 - b2 a1 )
 = ( d1 a2 - d2 a1 ) / ( - Ze )

Ze がゼロでなければ、( x , y , 0 )という形で点Aが求まります。

Ze がゼロのときには、y = 0 として、連立2元1次方程式に見立てて、x、zを求める。
 a1 x + c1 z = d1 ・・・式⑤
 a2 x + c2 z = d2 ・・・式⑥
式⑤、式⑥より
x = ( d1 c2 - d2 c1 ) / ( a1 c2 - a2 c1 )
 = ( d1 c2 - d2 c1 ) / ( - Ye )
z = ( d1 a2 - d2 a1 ) / ( c1 a2 - c2 a1 )
 = ( d1 a2 - d2 a1 ) / Ye

Ye がゼロでなければ、( x , 0 , z )という形で点Aが求まる。

Ze, および Ye がゼロのときには、x = 0 として、連立2元1次方程式として、y、zを求める。
 b1 y + c1 z = d1 ・・・式⑦
 b2 y + c2 z = d2 ・・・式⑧
式⑦、式⑧より
y = ( d1 c2 - c2 c1 ) / ( b1 c2 - b2 c1 )
 = ( d1 c2 - d2 c1 ) / Xe
z = ( d1 b2 - d2 b1 ) / ( c1 b2 - c2 b1 )
 = ( d1 b2 - d2 b1 ) / ( - Xe )

Xe がゼロでなければ、( 0 , y , z )という形で点Aが求まる。

Xe, Ze, Ye がすべてゼロのときには、2つの平面は平行で交線がない場合です。


まとめますと、
まず、2つの平面の法線ベクトルの外積計算により、交線の方向ベクトル を求めます。
e = [ b1 c2 - c1 b2 c1 a2 - a1 c2 a1 b2 - b1 a2 ]
ここで、
 Xe = b1 c2 - c1 b2
 Ye = c1 a2 - a1 c2
 Ze = a1 b2 - b1 a2
とします。
交線Lが通る点Pは、
Ze ≠ 0 のとき、
 ( ( d1 b2 - d2 b1 ) / Ze, ( d1 a2 - d2 a1 ) / ( - Ze ), 0 )
Ye ≠ 0 のとき、
 ( ( d1 c2 - d2 c1 ) / ( - Ye ), 0, ( d1 a2 - d2 a1 ) / Ye )
Xe ≠ 0 のとき
 ( 0, ( d1 c2 - d2 c1 ) / Xe, ( d1 b2 - d2 b1 ) / ( - Xe ) )
Xe = 0, Ye = 0, Ze = 0 のとき、
 交線はありません(2平面は平行です)

ダウンロード

サンプルプロジェクト