某会社の入社試験でこんな問題が出ました。
「線分A,Bが交差しているか調べる方法を書きなさい」
ははぁ、外積をつかってあーだこーだするんですな。
わんくま大阪勉強会で私がスピーカーをしたやつじゃないですか。
楽勝、楽勝…とはいかず、うだうだ書いてたら時間切れになってしまいました。
「ふふふ、簡単と思っているようだが…誰も二次元とは言ってない!!」
「な、なんだって!!三次元だと!!!」
ということで、線分は厳しいので、三次元空間で直線A,Bが交わるか調べる方法です。
その前に三次元空間における線の関係をおさらいしましょう。
線が2つあるとき、「同一」「平行」「交差」「ねじれ」のどれかになります。
「同一」は文字通りまったく同じ線です。
「平行」、「交差」は二次元でも出てくる関係なので問題ないでしょう。
残った「ねじれ」、これはなんでしょう。
一言で言うと、「平行」でも「交差」でもない状態です。
立方体の各辺において、図示しました。
ねじれの関係の辺は平行でもないし、交差もしてないことに注目してください。
で、どうすればいいのか。
直線同士が最も近づく距離を測ってやって、その距離が0なら交差、
そうでないならねじれ、ということにしましょう。
直線Aを含む平面を平面α、直線Bを含む平面を平面βと名付けます。
そして、平面α、平面βは平行です。
こうして、平行な平面αと平面βの距離を測ってやります。
なお、この平面α、平面βの組は必ず1つしかありません。
存在しなかったり、複数あったりすることはありません。
ということで、方針は決定したので
次回は実際のプログラムを書きつつ解説します。
数学好きの人は、実際にどんなプログラムを書けばいいか想像してください。