Open In App

# Find points at a given distance on a line of given slope

Given the co-ordinates of a 2-dimensional point p(x0, y0). Find the points at a distance L away from it, such that the line formed by joining these points has a slope of M.

Examples:

Input : p = (2, 1)
L = sqrt(2)
M = 1
Output :3, 2
1, 0
Explanation:
The two points are sqrt(2) distance away
from the source and have the required slope
m = 1.

Input : p = (1, 0)
L = 5
M = 0
Output : 6, 0
-4, 0

We need to find two points that are L distance from given point, on a line with slope M.
The idea has been introduced in below post.
Find Corners of Rectangle using mid points

Based on the input slope, the problem can be classified into 3 categories.

1. If slope is zero, we just need to adjust the x coordinate of the source point
2. If slope is infinite, the we need to adjust the y coordinate
3. For other values of slope, we can use the following equations to find the points

Now using the above formula we can find the required points.

## C++

 // C++ program to find the points on a line of// slope M at distance L#include using namespace std; // structure to represent a co-ordinate// pointstruct Point {     float x, y;    Point() { x = y = 0; }    Point(float a, float b) { x = a, y = b; }}; // Function to print pair of points at// distance 'l' and having a slope 'm'// from the sourcevoid printPoints(Point source, float l, int m){    // m is the slope of line, and the    // required Point lies distance l    // away from the source Point    Point a, b;     // slope is 0    if (m == 0) {        a.x = source.x + l;        a.y = source.y;         b.x = source.x - l;        b.y = source.y;    }     // if slope is infinite    else if (m == std::numeric_limits<float>::max()) {        a.x = source.x;        a.y = source.y + l;         b.x = source.x;        b.y = source.y - l;    }    else {        float dx = (l / sqrt(1 + (m * m)));        float dy = m * dx;        a.x = source.x + dx;        a.y = source.y + dy;        b.x = source.x - dx;        b.y = source.y - dy;    }     // print the first Point    cout << a.x << ", " << a.y << endl;     // print the second Point    cout << b.x << ", " << b.y << endl;} // driver functionint main(){    Point p(2, 1), q(1, 0);    printPoints(p, sqrt(2), 1);    cout << endl;    printPoints(q, 5, 0);    return 0;}

## Java

 // Java program to find the points on// a line of slope M at distance Lclass GFG {     // Class to represent a co-ordinate    // point    static class Point {        float x, y;        Point() { x = y = 0; }        Point(float a, float b)        {            x = a;            y = b;        }    };     // Function to print pair of points at    // distance 'l' and having a slope 'm'    // from the source    static void printPoints(Point source, float l, int m)    {         // m is the slope of line, and the        // required Point lies distance l        // away from the source Point        Point a = new Point();        Point b = new Point();         // Slope is 0        if (m == 0) {            a.x = source.x + l;            a.y = source.y;             b.x = source.x - l;            b.y = source.y;        }         // If slope is infinite        else if (Double.isInfinite(m)) {            a.x = source.x;            a.y = source.y + l;             b.x = source.x;            b.y = source.y - l;        }        else {            float dx = (float)(l / Math.sqrt(1 + (m * m)));            float dy = m * dx;            a.x = source.x + dx;            a.y = source.y + dy;            b.x = source.x - dx;            b.y = source.y - dy;        }         // Print the first Point        System.out.println(a.x + ", " + a.y);         // Print the second Point        System.out.println(b.x + ", " + b.y);    }     // Driver code    public static void main(String[] args)    {        Point p = new Point(2, 1), q = new Point(1, 0);        printPoints(p, (float)Math.sqrt(2), 1);         System.out.println();         printPoints(q, 5, 0);    }} // This code is contributed by Rajnis09

## C#

 // C# program to find the points on// a line of slope M at distance Lusing System; class GFG {     // Class to represent a co-ordinate    // point    public class Point {        public float x, y;         public Point() { x = y = 0; }         public Point(float a, float b)        {            x = a;            y = b;        }    };     // Function to print pair of points at    // distance 'l' and having a slope 'm'    // from the source    static void printPoints(Point source, float l, int m)    {         // m is the slope of line, and the        // required Point lies distance l        // away from the source Point        Point a = new Point();        Point b = new Point();         // Slope is 0        if (m == 0) {            a.x = source.x + l;            a.y = source.y;             b.x = source.x - l;            b.y = source.y;        }         // If slope is infinite        else if (Double.IsInfinity(m)) {            a.x = source.x;            a.y = source.y + l;             b.x = source.x;            b.y = source.y - l;        }        else {            float dx = (float)(l / Math.Sqrt(1 + (m * m)));            float dy = m * dx;            a.x = source.x + dx;            a.y = source.y + dy;            b.x = source.x - dx;            b.y = source.y - dy;        }         // Print the first Point        Console.WriteLine(a.x + ", " + a.y);         // Print the second Point        Console.WriteLine(b.x + ", " + b.y);    }     // Driver code    public static void Main(String[] args)    {        Point p = new Point(2, 1), q = new Point(1, 0);         printPoints(p, (float)Math.Sqrt(2), 1);         Console.WriteLine();         printPoints(q, 5, 0);    }} // This code is contributed by Amit Katiyar

## Python3

 # Python program to find the points on a line of# slope M at distance Limport math  # structure to represent a co-ordinate# point  class Point:    def __init__(self, x, y):        self.x = x        self.y = y # Function to print pair of points at# distance 'l' and having a slope 'm'# from the source  def printPoints(source, l, m):    # m is the slope of line, and the    # required Point lies distance l    # away from the source Point    a = Point(0, 0)    b = Point(0, 0)     # slope is 0    if m == 0:        a.x = source.x + l        a.y = source.y         b.x = source.x - l        b.y = source.y     # if slope is infinite    elif math.isfinite(m) is False:        a.x = source.x        a.y = source.y + l         b.x = source.x        b.y = source.y - l    else:        dx = (l / math.sqrt(1 + (m * m)))        dy = m * dx        a.x = source.x + dx        a.y = source.y + dy        b.x = source.x - dx        b.y = source.y - dy     # print the first Point    print(f"{a.x}, {a.y}")     # print the second Point    print(f"{b.x}, {b.y}")  # driver functionp = Point(2, 1)q = Point(1, 0)printPoints(p, math.sqrt(2), 1)print("\n")printPoints(q, 5, 0) # The code is contributed by Gautam goel(gautamgoel962)

## Javascript

 

Output

3, 2
1, 0

6, 0
-4, 0


Time Complexity: O(1)
Auxiliary Space: O(1)

This article is contributed by Ashutosh Kumar 😀 If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.