私は、2Dで点と線分の最短距離を見つける方法を記述する優れたスレッドをMATLABにプログラムを構築しています(Shortest distance between a point and a line segment )。私は、以前に答えられた質問と本質的に同じではなく、2DとMATLABの代わりに3Dで機能する関数が必要です。線分と3次元の点との最短距離
この前の投稿への回答のための一番上のコメントは、MATLABにありませんので、私はこのコードの裏で何が起こっているのか理解していません。たぶん、賢くて熟練している人がいますが、これを3D MATLABコードに変換するのに役立つでしょうか?
線分は、2つの点S1(x1、y1、z1)とS2(x2、y2、z2)として定義され、その点は単なる座標Pnt(x3、y3、z3)です。
編集:ここで少し混乱があるようです。私は本当に無限のラインではないラインセグメントを意味します。私が作業しているコードを添付しました。私が修正したこのコードは、もともと上記のリンクされたスレッドのコメントの一部として書かれており、元の著者Peter Karasevはそれに価値があると付け加えたいと思います。つまり、コードは2Dで動作し、3D(vz、uz、およびlenSqr)にするための3行目のコメントがあります。私の具体的な質問は、私は実際にdetPで数学的に何が起こっているのか、そしてdetPとそれに続くifステートメントをどのように3Dで動かせるかを理解していないということです。
入力は、元の質問テキストに上記で定義されているとおりです。
function r = PointToLineSegment3D(S1, S2, Pnt)
% r = PointToLineSegment3D(S1, S2, Pnt)
vx = S1(1)-Pnt(1);
vy = S1(2)-Pnt(2);
% vz = S1(3)-Pnt(3);
ux = S2(1)-S1(1);
uy = S2(2)-S1(2);
% uz = S2(3)-S1(3);
lenSqr= (ux*ux+uy*uy); % +uz*uz
detP= -vx*ux + -vy*uy;
if(detP < 0)
r = norm(S1-Pnt,2);
elseif(detP > lenSqr)
r = norm(S2-Pnt,2);
else
r = abs(ux*vy-uy*vx)/sqrt(lenSqr);
end
end
これまでに3Dで何を試しましたか?このサイトはコード作成サービスではありません。あなたのコードを示して、あなたが持っている特定の問題を記述してください。あなたの問題(2つのポイントで定義されたラインを意味すると仮定)は非常に簡単な数式を含む[ここでMathWorldで完全に説明されています](http://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html)です。 – horchler
http:// stackoverflow。com/questions/43207514/works for 2d and 3d – MBo
ご返信ありがとうございます。リクエストした情報が追加されました。 – AndrewTLombardo