# Dist_Point_LineSegment

Computes the minimum distance between a point and a line segment. The function is vectorized only for one point many lines or many points one line

Version : 1.0

Author : George Kourakos

email: giorgk@gmail.com

Date 18-Mar-2014

Department of Land Air and Water

University of California Davis

## Usage

dst = Dist_Point_LineSegment(px, py, L)

## Input

px: [n x 1] x coordinates of point/s. n is the number of points. If n > 1 then the number of lines must be 1.

py: [n x 1] y coordinate of point/s. n is the number of points. If n > 1 then the number of lines must be 1.

L: [N x 4] line defined by two points. The points must be given as follows: [p1x p1y p2x p2y] where (p1x,p1y) are the coordinates of one point and (p2x, p2y) the coordinates of the other end of the line. N is the number of lines. If N > 1 then the number of points must be 1.

## Output

dst: the distance between the point the the lines [N x 1] or the points and line.

## Example

1st case: Many points one line

Create 10 points and one line

```p = 10*rand(10,2);
L= [2 5 7 5];
```

compute the distances between the line and the point

```dst = Dist_Point_LineSegment(p(:,1), p(:,2), L)
```
```dst =

4.1713
3.7024
3.2661
1.0906
4.2933
3.0336
4.5083
1.0074
0.2688
1.5042

```

Plot the points, the lines and the distances between them

```plot(p(:,1),p(:,2),'.'); hold on
plot([L(1,1) L(1,3)], [L(1,2) L(1,4)],'r')
for i = 1:size(p,1)
text(p(i,1),p(i,2), [' ' num2str(dst(i))])
end
```

2nd case: One point many lines

Create a point and 4 lines

```p = [5 5];
L= 10*rand(4,4);
```

compute the distances between the lines and the point

```dst = Dist_Point_LineSegment(p(1,1), p(1,2), L)
```
```dst =

0.0922
4.6006
3.9227
1.2448

```

Plot the points, the lines and the distances between them

```hold off
plot(p(1,1),p(1,2),'or'); hold on
plot([L(1,1) L(1,3)], [L(1,2) L(1,4)],'r')
for i = 1:size(L,1)
plot([L(i,1) L(i,3)], [L(i,2) L(i,4)],'.-')
text((L(i,1) + L(i,3))/2, (L(i,2) + L(i,4))/2, [' ' num2str(dst(i))])
end
```