我一直在用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