http://b.hatena.ne.jp/keyword/URL%E3%81%AF%E3%83%80%E3%83%9F%E3%...
はてなブックマーク - URLはダミーです
線分上の任意の点P,Qを以下のように表す。A,Cは各線分の単位ベクトル、t,uはパラメータ、B,Dは各線分上の点とする。
P=At+B
Q=Cu+D
後は、|P-Q|=f(t,u)となる2変数関数fを作ってから、fが最小値となるt,uを求めればよいだけ。
数年ぶりに数学したので間違ってるかもしれません。この方法は力技以外の何者でもないです。
Wolfram Research, Inc.
(X-P)=sAと(X-Q)=tBの直線(大文字はベクトル)とすると、2直線間の最短距離の直線はAxB(ベクトル積)の方向です。これをCとすると、最短距離はPを通る平面C(X-P)=0とQを通る平面C(X-Q)=0の距離と同じはずで、Cを単位ベクトルにとっておけば、C(rC+P-Q)=0を満たすr(の絶対値)が求める距離になる…はずです。
点の位置は、直線の一方をrCだけ並行移動した直線同士の交点を求めることになるはずです。
いまいち歯切れ悪くて申し訳ない。
http://www.cybernet.co.jp/matlab/
MATLAB:サイバネットシステム
申し訳ないです。やはりおぼつかなかった。訂正させてください。
各直線を(X-P)=sA, (X-Q)=tBとすると、各直線を含む法線ベクトルの等しい2平面を考えて、するとその単位法線ベクトルはC=AxBとなって、最短距離は|C(P-Q)|ですね。各平面に含まれる点を結ぶ線分の、法線ベクトル方向の成分がすなわち両平面の距離のはずですから。
ありがとうございます。
少し考えてみます
ご回答ありがとうございます
まだ、使いなれてないもので、すいませんが、回答者1の方へのコメントも書かせていただきます。
回答者1の方へ
ご回答ありがとうございます。実はそれは私も考えました。私が考えたのは、AB上の任意の点P=At+Bと線分CDを含む平面へと座標を変換し、その平面上で2次元の点と直線の距離の公式を使い、点PとCDの最短距離(パラメータtを含む)を求め、このtを含む式の最小値を求めるをいうものです。最短距離の線の両端の座標は平面で考えたときに求め、座標を戻すというやり方です。しかし、tを含む最短距離の式が複雑になってしまい、他の方法を探しています。
回答者2の方へ
ご回答ありがとうございます。こちらは少し難しいですね。ちょっと式におこしてみます。