# 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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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++ 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;  }

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.