# 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 // point struct 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 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, 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 infinte     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 function int 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 L  class 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 infinte     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 L  using 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 infinte     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

Output:

3, 2
1, 0

6, 0
-4, 0



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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Improved By : Rajnis09, amit143katiyar

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.