geometry
line segment
point location
computational geometry
mathematics

Find if point lies on line segment

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

Introduction

Determining if a point lies on a line segment is a fundamental problem in computational geometry with practical applications in computer graphics, geographic information systems (GIS), and more. This article explores the mathematical principles and algorithms used to determine if a given point resides precisely on a line segment defined by two endpoints.

Mathematical Background

A line segment is a part of a line bounded by two endpoints. If you have a line segment `AB` with endpoints `A(x1, y1)` and `B(x2, y2)`, and a point `P(x, y)`, the question is whether `P` lies on the line segment `AB`.

To determine if `P` lies on `AB`, we need to check two main conditions:

Collinearity: The point `P` should be collinear with `A` and `B`, meaning all three points lie on the same straight line. • Segment Bounds: The point `P` must be situated between `A` and `B`.

Condition 1: Collinearity

A point is collinear with two other points if the area of the triangle formed by the three points is zero. For three points to lie on the same line, the cross product of vectors $\overrightarrow\{AP\}$ and $\overrightarrow\{AB\}$ should be zero. Mathematically, this is expressed as:

(xx1)(y2y1)=(yy1)(x2x1)(x - x1) \cdot (y2 - y1) = (y - y1) \cdot (x2 - x1)

Condition 2: Segment Bounds

Once collinearity is confirmed, check that `P` lies between `A` and `B`. This involves the following checks:

• The x-coordinate of `P` is between the x-coordinates of `A` and `B`. • The y-coordinate of `P` is between the y-coordinates of `A` and `B`.

Mathematically, this is expressed using inequalities:

min(x1,x2)xmax(x1,x2)min(y1,y2)ymax(y1,y2)\min(x1, x2) \leq x \leq \max(x1, x2) \\ \min(y1, y2) \leq y \leq \max(y1, y2)

Algorithm

Here is a step-by-step algorithm to check if a point `P` lies on the line segment `AB`:

  1. Calculate Collinearity: Use the collinearity condition to verify if `P` is collinear with `A` and `B`.
  2. Verify Segment Boundaries: Check the bounds using the inequality conditions mentioned above.

Example

Let's examine an example to clarify these concepts.

Suppose `A(1, 1)`, `B(3, 3)`, and `P(2, 2)`. To determine if `P` lies on `AB`:

  1. Calculate collinearity using the formula:
    (21)(31)=(21)(31)2=2(2 - 1) \cdot (3 - 1) = (2 - 1) \cdot (3 - 1) \\ 2 = 2
    `P` is collinear with `A` and `B`.
  2. Check the segment bounds:
    min(1,3)2max(1,3)123min(1,3)2max(1,3)123\min(1, 3) \leq 2 \leq \max(1, 3) \\ 1 \leq 2 \leq 3 \\ \min(1, 3) \leq 2 \leq \max(1, 3) \\ 1 \leq 2 \leq 3

Thus, `P(2, 2)` lies on the line segment `AB`.

Summary Table

ConditionMathematical ExpressionExplanation
Collinearity(xx1)(y2y1)=(yy1)(x2x1)(x - x1) \cdot (y2 - y1) = (y - y1) \cdot (x2 - x1)Ensures points A, B, and P are on the same line.
Segment Bound (x)min(x1,x2)xmax(x1,x2)\min(x1, x2) \leq x \leq \max(x1, x2)Verifies that the x-coordinate of P is within the boundary created by A and B.
Segment Bound (y)min(y1,y2)ymax(y1,y2)\min(y1, y2) \leq y \leq \max(y1, y2)Verifies that the y-coordinate of P is within the boundary created by A and B.

Additional Details

Edge Cases

Vertical Line Segments: When the line segment is vertical (i.e., `x1 = x2`), the x-bound check simplifies to ensuring `P`'s x-coordinate is equal to the common x-coordinate of `A` and `B`. • Horizontal Line Segments: Similarly, for horizontal segments (`y1 = y2`), only y-coordinates need to be checked. • Point Coinciding with Endpoint: If `P` coincides exactly with either `A` or `B`, it is automatically considered to lie on the segment.

Computational Considerations

Floating point calculations can introduce significant precision errors when checking for collinearity. Using integer arithmetic or rational numbers when possible can help mitigate this. For practical programming language implementations, epsilon values should often be used to account for these precision issues.

Conclusion

Determining if a point lies on a line segment encompasses understanding geometric collinearity and incorporates boundary conditions for the segment's endpoints. With applications ranging from vector graphics rendering to GPS-based applications, understanding and applying these principles accurately and efficiently is crucial in computational geometry fields.


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.