geometry
line segment
point distance
spatial analysis
mathematical computation

Checking a line segment is within a distance from a point

Data Structures & Algorithms practice on Codemia

Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.

Practice algorithms

Checking whether a line segment is within a specific distance from a given point is a fundamental geometric problem with wide-ranging applications, from computer graphics to robotics. This article delves into the technical methodologies used to solve this problem, offering explanations, examples, and algorithms that underpin the solution. It also provides a detailed exploration of the mathematical principles involved.

Problem Overview

Imagine you have a line segment defined by the endpoints $ A(x_1, y_1) $ and $ B(x_2, y_2) $, and you want to determine if any point on this segment is within a distance dd from a point P(x0,y0)P(x_0, y_0). This problem can be approached using analytical geometry and vector mathematics.

Mathematical Formulation

The distance DD from a point P(x0,y0)P(x_0, y_0) to a line segment defined by endpoints $ A(x_1, y_1) $ and $ B(x_2, y_2) $ can be found using the following steps:

Step 1: Parametric Representation of the Line Segment

The line segment ABAB can be mathematically expressed in a parametric form as:

L(t)=(1t)A+tB,t[0,1]L(t) = (1-t)A + tB, \quad t \in [0, 1]

Where: • A=(x1,y1)A = (x_1, y_1)B=(x2,y2)B = (x_2, y_2)L(t)=((1t)x1+tx2,(1t)y1+ty2)L(t) = ((1-t)x_1 + tx_2, (1-t)y_1 + ty_2)

Step 2: Compute the Distance from Point PP to the Line Segment

To find the shortest distance, we first consider the infinite line extending the segment. The distance from point PP to this line is minimized at a point where the perpendicular from PP intersects ABAB. For segment checking, however, we must ensure this perpendicular intersection lies within the segment.

The distance to the infinite line is given by:

Dline=(x2x1)(y1y0)(y2y1)(x1x0)(x2x1)2+(y2y1)2D_{\text{line}} = \frac{|(x_2-x_1)(y_1-y_0) - (y_2-y_1)(x_1-x_0)|}{\sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}}

Step 3: Check if the Perpendicular Intersection Lies within the Segment

Define the vectors: • AB=(x2x1,y2y1)\vec{AB} = (x_2 - x_1, y_2 - y_1)AP=(x0x1,y0y1)\vec{AP} = (x_0 - x_1, y_0 - y_1)

The parameter tt for the perpendicular projection from PP onto ABAB is given by:

t=APABABABt = \frac{\vec{AP} \cdot \vec{AB}}{\vec{AB} \cdot \vec{AB}}

• If 0t10 \leq t \leq 1, the perpendicular intersects within the segment. • Otherwise, the closest point is one of the endpoints, either $ A $ or $ B $.

Step 4: Calculate the Distance Based on tt

  1. If 0t10 \leq t \leq 1: The perpendicular intersects within the segment. Use the previously calculated DlineD_{\text{line}}.
  2. If t<0t < 0: The closest is AA. DA=(x0x1)2+(y0y1)2D_A = \sqrt{(x_0 - x_1)^2 + (y_0 - y_1)^2}
  3. If t>1t > 1: The closest is BB. DB=(x0x2)2+(y0y2)2D_B = \sqrt{(x_0 - x_2)^2 + (y_0 - y_2)^2}

Decision Criteria

Finally, perform the check:

Distance={D_line,if 0t1D_A,if t\<0D_B,if t>1\text{Distance} = \begin{cases} D\_{\text{line}}, & \text{if } 0 \leq t \leq 1 \\ D\_A, & \text{if } t \< 0 \\ D\_B, & \text{if } t > 1 \end{cases}

If any of these calculated distances are less than or equal to dd, the point PP is within distance dd from the segment.

Implementation Example

Here’s a basic Python implementation to demonstrate the concept:


Related reading
Course
Intermediate
27 lessons
15 hours
DSA Fundamentals

Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.

View the course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

Data Structures & Algorithms practice on Codemia

Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.

Practice algorithms

All Rights Reserved.