raw snippet

Given a line segment between two points \(\mathbf{A}\) and \(\mathbf{B}\), we want to know the smallest distance between the point \(\mathbf{P}\) and the line segment. To do so, we only need to find the normal \(\mathbf{n}\) to the line segment, which basically is the perpendicular vector of \(\mathbf{v}\):

\[\mathbf{n} = \mathbf{v}^\perp\]

Now the distance \(d\) between the line and point \(\mathbf{P}\) is thus the vector projection of \(\mathbf{m} = \mathbf{P} - \mathbf{A}\) onto \(\mathbf{n}\), which is

\[d = \frac{|\mathbf{n}\cdot\mathbf{m}|}{|\mathbf{n}|} = |\hat{\mathbf{v}}^\perp\cdot\mathbf{m}|\]

JavaScript Implementation

function linePointDistance(A, B, P) {

  var n = {x: A.y - B.y, y: B.x - A.x};
  var m = {x: P.x - A.x, y: P.y - A.y};
  return Math.abs(n.x * m.x + n.y * m.y) / Math.sqrt(n.x * n.x + n.y * n.y);
}