File Exchange point to line distance

version 1.3.0.0 (2.12 KB) by Rik

Rik (view profile)

calculate the distance between a 2D or 3D line and one or more points

Updated 29 Jan 2019

You can input either a 2D or a 3D line and 2D or 3D points. This function is an extended version of the line below, with some input checking:
distance=norm(cross(v1-v2,pt-v2))/norm(v1-v2)

Cite As

Rik (2019). point to line distance (https://www.mathworks.com/matlabcentral/fileexchange/64396-point-to-line-distance), MATLAB Central File Exchange. Retrieved .

Rik

Rik (view profile)

@Nicola, thanks for pointing out this issue. I now uploaded a version where this should be fixed. The function now properly accepts 2D inputs.

Nicola Piccinelli

Nicola Piccinelli (view profile)

The input point "pt" shouldn't be checked against the case in which it's of size 2?

Rik

Kaleesh Bala

Kaleesh Bala (view profile)

lemme put this way

curvexy1 = [ 0 20 ];
curvexy2 =[20 50];

curvexy = (curvexy1 & curvexy2 );

plot (curvexy,'-')
hold on

[x,y] = ginput(1);
h1 = text(x,y,'o', ...
'HorizontalAlignment','center', ...
'Color', [1 0 0], ...
'FontSize',8);

%% let curvexy1 ,curvexy2 be v1,v2 and ginput(1) be pt - I tried using your code to identify the perpendicular distance but ??

Rik

Rik (view profile)

You can find the solution here: https://gamedev.stackexchange.com/questions/72528/how-can-i-project-a-3d-point-onto-a-3d-line

A non-vectorized solution in the terms of the input to this function:

ap = pt-v1;ab = v2-v1;
result = v1 + dot(ap,ab)/dot(ab,ab) * ab;

Rafael Cordero

Rafael Cordero (view profile)

Hi! Thanks, works great. I was wondering: how do I find the POINT of intersection between the original line and the projection of the point to this line? Thank you!