我一直在用MATLAB編寫程序,描述如何在2D中找到點和線段之間的最短距離(Shortest distance between a point and a line segment )。我需要的功能基本上與以前回答的問題基本相同,但在3D中而不是2D和MATLAB中。線段與三維點之間的最短距離(3D)
這個以前的文章的答案沒有頂部的評論是在MATLAB中,所以我有一些麻煩理解這段代碼幕後發生了什麼。也許你們中有些人更聰明或者更熟練,可以幫助我將其轉換爲3D MATLAB代碼?線段將被定義爲兩個點S1(x1,y1,z1)和S2(x2,y2,z2),並且該點僅僅是單個座標Pnt(x3,y3,z3)。
編輯:這裏似乎有點混亂。我的確意味着線段不是無限的線條。我附上了我正在使用的代碼。我想補充一點,我修改的代碼最初是作爲上述鏈接線程的註釋的一部分編寫的,原始作者Peter Karasev值得讚揚。現在,代碼工作在2D中,我已經在3條線中進行了評論,這些條目開始使它成爲3D(vz,uz和lenSqr)。我的具體問題是,我真的不明白使用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
到目前爲止,您在3-D中嘗試了些什麼?本網站不是代碼編寫服務。請向我們展示您的代碼並描述您擁有的具體問題。你的問題(假設你的意思是一個由兩點定義的行)[在MathWorld這裏完整描述](http://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html),包括非常簡單的公式。 – horchler
http:// stackoverflow。com/questions/43207514 /爲2d和3d工作 – MBo
感謝@horchler的回覆,我添加了您請求的信息。 – AndrewTLombardo