IndexSoftwareCoding memoMisc.BBSLinkContact

2直線間の距離(3次元)

2005/12/15

左図のように点aを通り方向ベクトルがdaの直線 l ,それと,点bを通り方向ベクトルがdbの直線 m を考えます.

l上に点pを,m上に点qをとります.
pl上にあるのでsをパラメータとして

p = a + s da

と書けます.同様にq は m上にあるのでtをパラメータとして

q = b + t db

と書けます.次にpq = q - pとすると

pq = (b + t db) - (a + s da)
  
= b - a + t db - s da

|pq|が最小のときpqdaかつpqdbとなるから

pq・da = 0
pq・db = 0 (・は内積記号)

この2式よりsとtの2元連立方程式になるのでs, tを出します.結局,ab=b-aとして,

s = { |db|2(abda) - (dadb)(abdb) } / { |da|2|db|2 - (dadb)2}
t = { (dadb)(abda) - |da|2(abdb) } / { |da|2|db|2 - (dadb)2}

と求まり,

p = a + s*da

q = b + t*db

に代入し,|pq|が求める2直線間の距離になります.