Related Articles

# Equation of a straight line passing through a point and making a given angle with a given line

• Last Updated : 29 Jul, 2021

Given four integers a, b, c and d, representing coefficients of a straight line with equation (ax + by + c = 0), the task is to find the equations of the two straight lines passing through a given point and making an angle α with the given straight line. Examples:

Input: a = 2, b = 3, c = -7, x1 = 4, y1 = 9, α = 30
Output: y = -0.49x +10
y = -15.51x + 71

Input: a = 3, b = -2, c = 4, x1 = 3, y1 = 4, α = 55
Output: y = 43.73x -127
y = -0.39x +5

Approach: Figure 1

• Let P (x1, y1) be the given point and line LMN (In figure 1) be the given line making an angle θ with the positive x-axis.
• Let PMR and PNS be two required lines which makes an angle (α) with the given line.
• Let these lines meet the x-axis at R and S respectively.
• Suppose line PMR and PNS make angles (θ1) and (θ2) respectively with the positive direction of the x-axis.
• Then using the slope point form of a straight line, the equation of two lines are : … (1) … (2) and are the slopes of lines PMR and PNS respectively. Figure 2

• Now consider triangle LMR:

Using the property: An exterior angle of a triangle is equal to the sum of the two opposite interior angles   … (3)

• Now consider triangle LNS: Figure 3    … (4)

• Now we calculate the value of (tanθ):

By formula, slope of given line  • Now substitute the values of (tan(θ1)) and (tan(θ2)) from equations (3) and (4) to equations (1) and (2) to get the final equations of both the lines:

Line PMR : Line PNS : Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to find slope of given line``double` `line_slope(``double` `a, ``double` `b)``{``    ``if` `(a != 0)``        ``return` `-b / a;` `    ``// Special case when slope of``    ``// line is infinity or is``    ``// perpendicular to x-axis``    ``else``        ``return` `(-2);``}` `// Function to find equations of lines``// passing through the given point``// and making an angle with given line``void` `line_equation(``double` `a, ``double` `b,``                   ``double` `c, ``double` `x1,``                   ``double` `y1, ``double` `alfa)``{``    ``// Set the precision``    ``cout << fixed << setprecision(2);` `    ``// Store slope of given line``    ``double` `given_slope = line_slope(a, b);` `    ``// Convert degrees to radians``    ``double` `x = alfa * 3.14159 / 180;` `    ``// Special case when slope of``    ``// given line is infinity:``    ``// In this case slope of one line``    ``// will be equal to alfa``    ``// and the other line will be``    ``// equal to (180-alfa)``    ``if` `(given_slope == -2) {` `        ``// In this case slope of``        ``// required lines can't be``        ``// infinity``        ``double` `slope_1 = ``tan``(x);``        ``double` `slope_2 = ``tan``(3.14159 - x);` `        ``// g and f are the variables``        ``// of required equations``        ``int` `g = x1, f = x1;``        ``g *= (-slope_1);``        ``g += y1;` `        ``// Print first line equation``        ``if` `(g > 0)``            ``cout << ``"y = "` `<< slope_1``                 ``<< ``"x +"` `<< g << endl;``        ``if` `(g <= 0)``            ``cout << ``"y = "` `<< slope_1``                 ``<< ``"x "` `<< g << endl;` `        ``f *= (-slope_2);``        ``f += y1;` `        ``// Print second line equation``        ``if` `(f > 0) {``            ``cout << ``"y = "` `<< slope_2``                 ``<< ``"x +"` `<< f << endl;``        ``}``        ``if` `(f <= 0)``            ``cout << ``"y = "` `<< slope_2``                 ``<< ``"x "` `<< f << endl;``        ``return``;``    ``}` `    ``// Special case when slope of``    ``// required line becomes infinity``    ``if` `(1 - ``tan``(x) * given_slope == 0) {``        ``cout << ``"x = "` `<< x1 << endl;``    ``}``    ``if` `(1 + ``tan``(x) * given_slope == 0) {``        ``cout << ``"x = "` `<< x1 << endl;``    ``}` `    ``// General case``    ``double` `slope_1 = (given_slope + ``tan``(x))``                     ``/ (1 - ``tan``(x) * given_slope);``    ``double` `slope_2 = (given_slope - ``tan``(x))``                     ``/ (1 + ``tan``(x) * given_slope);` `    ``// g and f are the variables``    ``// of required equations``    ``int` `g = x1, f = x1;``    ``g *= (-slope_1);``    ``g += y1;` `    ``// Print first line equation``    ``if` `(g > 0 && 1 - ``tan``(x) * given_slope != 0)``        ``cout << ``"y = "` `<< slope_1``             ``<< ``"x +"` `<< g << endl;``    ``if` `(g <= 0 && 1 - ``tan``(x) * given_slope != 0)``        ``cout << ``"y = "` `<< slope_1``             ``<< ``"x "` `<< g << endl;``    ``f *= (-slope_2);``    ``f += y1;` `    ``// Print second line equation``    ``if` `(f > 0 && 1 + ``tan``(x) * given_slope != 0) {``        ``cout << ``"y = "` `<< slope_2``             ``<< ``"x +"` `<< f << endl;``    ``}``    ``if` `(f <= 0 && 1 + ``tan``(x) * given_slope != 0)``        ``cout << ``"y = "` `<< slope_2``             ``<< ``"x "` `<< f << endl;``}` `// Driver Code``int` `main()``{``    ``// Given Input``    ``double` `a = 2, b = 3, c = -7;``    ``double` `x1 = 4, y1 = 9;``    ``double` `alfa = 30;` `    ``// Function Call``    ``line_equation(a, b, c, x1, y1, alfa);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.io.*;` `class` `GFG{``  ` `// Function to find slope of given line``static` `double` `line_slope(``double` `a, ``double` `b)``{``    ``if` `(a != ``0``)``        ``return` `-b / a;` `    ``// Special case when slope of``    ``// line is infinity or is``    ``// perpendicular to x-axis``    ``else``        ``return` `(-``2``);``}` `// Function to find equations of lines``// passing through the given point``// and making an angle with given line``static` `void` `line_equation(``double` `a, ``double` `b,``                          ``double` `c, ``double` `x1,``                          ``double` `y1, ``double` `alfa)``{``    ` `    ``// Store slope of given line``    ``double` `given_slope = line_slope(a, b);` `    ``// Convert degrees to radians``    ``double` `x = alfa * ``3.14159` `/ ``180``;` `    ``// Special case when slope of``    ``// given line is infinity:``    ``// In this case slope of one line``    ``// will be equal to alfa``    ``// and the other line will be``    ``// equal to (180-alfa)``    ``if` `(given_slope == -``2``)``    ``{``        ` `        ``// In this case slope of``        ``// required lines can't be``        ``// infinity``        ``double` `slope_1 = Math.tan(x);``        ``double` `slope_2 = Math.tan(``3.14159` `- x);` `        ``// g and f are the variables``        ``// of required equations``        ``int` `g = (``int``)x1, f = (``int``)x1;``        ``g *= (-slope_1);``        ``g += y1;` `        ``// Print first line equation``        ``if` `(g > ``0``)``            ``System.out.println(``"y = "` `+``            ``(Math.round(slope_1 * ``100.0``) / ``100.0``) +``          ``"x +"` `+ (Math.round(g * ``100.0``) / ``100.0``));``        ``if` `(g <= ``0``)``             ``System.out.println(``"y = "` `+``             ``(Math.round(slope_1 * ``100.0``) / ``100.0``) +``            ``"x "` `+ (Math.round(g * ``100.0``) / ``100.0``));` `        ``f *= (-slope_2);``        ``f += y1;` `        ``// Print second line equation``        ``if` `(f > ``0``)``        ``{``             ``System.out.println(``"y = "` `+``             ``(Math.round(slope_2 * ``100.0``) / ``100.0``) +``           ``"x +"` `+ (Math.round(f * ``100.0``) / ``100.0``));``        ``}``        ``if` `(f <= ``0``)``             ``System.out.println(``"y = "` `+``             ``(Math.round(slope_1 * ``100.0``) / ``100.0``) +``            ``"x "` `+ (Math.round(g * ``100.0``) / ``100.0``));``        ``return``;``    ``}` `    ``// Special case when slope of``    ``// required line becomes infinity``    ``if` `(``1` `- Math.tan(x) * given_slope == ``0``)``    ``{``         ``System.out.println(``"x = "` `+``         ``(Math.round(x1 * ``100.0``) / ``100.0``));``    ``}``    ``if` `(``1` `+ Math.tan(x) * given_slope == ``0``)``    ``{``        ``System.out.println(``"x = "` `+``        ``(Math.round(x1 * ``100.0``) / ``100.0``));``    ``}` `    ``// General case``    ``double` `slope_1 = (given_slope + Math.tan(x)) /``                 ``(``1` `- Math.tan(x) * given_slope);``    ``double` `slope_2 = (given_slope - Math.tan(x)) /``                 ``(``1` `+ Math.tan(x) * given_slope);` `    ``// g and f are the variables``    ``// of required equations``    ``int` `g = (``int``)x1, f = (``int``)x1;``    ``g *= (-slope_1);``    ``g += y1;` `    ``// Print first line equation``    ``if` `(g > ``0` `&& ``1` `- Math.tan(x) * given_slope != ``0``)``          ``System.out.println(``"y = "` `+``          ``(Math.round(slope_1 * ``100.0``) / ``100.0``) +``      ``"x +"` `+ (Math.round(g * ``100.0``) / ``100.0``));``    ``if` `(g <= ``0` `&& ``1` `- Math.tan(x) * given_slope != ``0``)``       ``System.out.println(``"y = "` `+``       ``(Math.round(slope_1 * ``100.0``) / ``100.0``) +``      ``"x "` `+ (Math.round(g * ``100.0``) / ``100.0``));``      ` `    ``f *= (-slope_2);``    ``f += y1;` `    ``// Print second line equation``    ``if` `(f > ``0` `&& ``1` `+ Math.tan(x) * given_slope != ``0``)``    ``{``        ``System.out.println(``"y = "` `+``        ``(Math.round(slope_2 * ``100.0``) / ``100.0``) +``      ``"x +"` `+ (Math.round(f * ``100.0``) / ``100.0``));``    ``}``    ``if` `(f <= ``0` `&& ``1` `+ Math.tan(x) * given_slope != ``0``)``        ``System.out.println(``"y = "` `+``        ``(Math.round(slope_2 * ``100.0``) / ``100.0``) +``      ``"x +"` `+ (Math.round(f * ``100.0``) / ``100.0``));``}` `// Driver Code``public` `static` `void` `main (String[] args)``{``    ` `    ``// Given Input``    ``double` `a = ``2``, b = ``3``, c = -``7``;``    ``double` `x1 = ``4``, y1 = ``9``;``    ``double` `alfa = ``30``;``    ` `    ``// Function Call``    ``line_equation(a, b, c, x1, y1, alfa);``}``}` `// This code is contributed by Dharanendra L V.`

## Python3

 `# Python3 program for the above approach``import` `math` `# Function to find slope of given line``def` `line_slope(a, b):` `    ``if` `(a !``=` `0``):``        ``return` `-``b ``/` `a` `    ``# Special case when slope of``    ``# line is infinity or is``    ``# perpendicular to x-axis``    ``else``:``        ``return` `(``-``2``)` `# Function to find equations of lines``# passing through the given point``# and making an angle with given line``def` `line_equation(a, b, c, x1, y1, alfa):``    ` `    ``# Store slope of given line``    ``given_slope ``=` `line_slope(a, b)` `    ``# Convert degrees to radians``    ``x ``=` `alfa ``*` `3.14159` `/` `180` `    ``# Special case when slope of``    ``# given line is infinity:``    ``# In this case slope of one line``    ``# will be equal to alfa``    ``# and the other line will be``    ``# equal to (180-alfa)``    ``if` `(given_slope ``=``=` `-``2``):` `        ``# In this case slope of``        ``# required lines can't be``        ``# infinity``        ``slope_1 ``=` `math.tan(x)``        ``slope_2 ``=` `math.tan(``3.14159` `-` `x)` `        ``# g and f are the variables``        ``# of required equations``        ``g ``=` `x1, f ``=` `x1``        ``g ``*``=` `(``-``slope_1)``        ``g ``+``=` `y1` `        ``# Print first line equation``        ``if` `(g > ``0``):``            ``print``(``"y = "``, ``round``(slope_1, ``2``),``                  ``"x +"` `, ``round``(g));``        ``if` `(g <``=` `0``):``            ``print``(``"y = "``, ``round``(slope_1, ``2``),``                  ``"x "``, ``round``(g))` `        ``f ``*``=` `(``-``slope_2)``        ``f ``+``=` `y1` `        ``# Print second line equation``        ``if` `(f > ``0``):``            ``print``(``"y = "``, ``round``(slope_2, ``2``),``                  ``"x +"``, ``round``(f))``        ` `        ``if` `(f <``=` `0``):``            ``print``(``"y = "` `, ``round``(slope_2, ``2``),``                  ``"x "` `, ``round``(f))``        ``return``    ` `    ``# Special case when slope of``    ``# required line becomes infinity``    ``if` `(``1` `-` `math.tan(x) ``*` `given_slope ``=``=` `0``):``        ``print``(``"x ="``, x1)``    ` `    ``if` `(``1` `+` `math.tan(x) ``*` `given_slope ``=``=` `0``):``        ``print``(``"x ="``, x1)``    ` `    ``# General case``    ``slope_1 ``=` `((given_slope ``+` `math.tan(x)) ``/``           ``(``1` `-` `math.tan(x) ``*` `given_slope))``    ``slope_2 ``=` `((given_slope ``-` `math.tan(x)) ``/``           ``(``1` `+` `math.tan(x) ``*` `given_slope))` `    ``# g and f are the variables``    ``# of required equations``    ``g ``=` `x1``    ``f ``=` `x1``    ``g ``*``=` `(``-``slope_1)``    ``g ``+``=` `y1` `    ``# Print first line equation``    ``if` `(g > ``0` `and` `1` `-` `math.tan(x) ``*` `given_slope !``=` `0``):``        ``print``(``"y = "``, ``round``(slope_1, ``2``),``              ``"x +"``, ``round``(g))``    ``if` `(g <``=` `0` `and` `1` `-` `math.tan(x) ``*` `given_slope !``=` `0``):``        ``print``(``"y = "``, ``round``(slope_1, ``2``),``              ``"x "``, ``round``(g))``              ` `    ``f ``*``=` `(``-``slope_2)``    ``f ``+``=` `y1` `    ``# Print second line equation``    ``if` `(f > ``0` `and` `1` `+` `math.tan(x) ``*` `given_slope !``=` `0``):``        ``print``(``"y = "``, ``round``(slope_2, ``2``),``              ``"x +"``, ``round``(f))``    ` `    ``if` `(f <``=` `0` `and` `1` `+` `math.tan(x) ``*` `given_slope !``=` `0``):``        ``print``(``"y = "``, ``round``(slope_2, ``2``),``              ``"x "` `, ``round``(f))``              ` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:` `    ``# Given Input``    ``a ``=` `2``    ``b ``=` `3``    ``c ``=` `-``7``    ``x1 ``=` `4``    ``y1 ``=` `9``    ``alfa ``=` `30``    ` `    ``# Function Call``    ``line_equation(a, b, c, x1, y1, alfa)` `# This code is contributed by ukasp`

## C#

 `// C# program for the above approach`  `using` `System;``using` `System.Collections.Generic;``public` `class` `GFG{``  ` `// Function to find slope of given line``static` `double` `line_slope(``double` `a, ``double` `b)``{``    ``if` `(a != 0)``        ``return` `-b / a;` `    ``// Special case when slope of``    ``// line is infinity or is``    ``// perpendicular to x-axis``    ``else``        ``return` `(-2);``}` `// Function to find equations of lines``// passing through the given point``// and making an angle with given line``static` `void` `line_equation(``double` `a, ``double` `b,``                          ``double` `c, ``double` `x1,``                          ``double` `y1, ``double` `alfa)``{``    ` `    ``// Store slope of given line``    ``double` `given_slope = line_slope(a, b);` `    ``// Convert degrees to radians``    ``double` `x = alfa * 3.14159 / 180;``    ``double` `slope_1,slope_2;``    ``double` `g,f;``    ``// Special case when slope of``    ``// given line is infinity:``    ``// In this case slope of one line``    ``// will be equal to alfa``    ``// and the other line will be``    ``// equal to (180-alfa)``    ``if` `(given_slope == -2)``    ``{``        ` `        ``// In this case slope of``        ``// required lines can't be``        ``// infinity``        ``slope_1 = Math.Tan(x);``        ``slope_2 = Math.Tan(3.14159 - x);` `        ``// g and f are the variables``        ``// of required equations``        ``g = (``int``)x1;``        ``f = (``int``)x1;``        ``g *= (-slope_1);``        ``g += y1;` `        ``// Print first line equation``        ``if` `(g > 0)``            ``Console.WriteLine(``"y = "` `+``            ``(Math.Round(slope_1 * 100.0) / 100.0) +``          ``"x +"` `+ (Math.Round((``int``)g * 100.0) / 100.0));``        ``if` `(g <= 0)``             ``Console.WriteLine(``"y = "` `+``             ``(Math.Round(slope_1 * 100.0) / 100.0) +``            ``"x "` `+ (Math.Round((``int``)g * 100.0) / 100.0));` `        ``f *= (-slope_2);``        ``f += y1;` `        ``// Print second line equation``        ``if` `(f > 0)``        ``{``             ``Console.WriteLine(``"y = "` `+``             ``(Math.Round(slope_2 * 100.0) / 100.0) +``           ``"x +"` `+ (Math.Round((``int``)f * 100.0) / 100.0));``        ``}``        ``if` `(f <= 0)``             ``Console.WriteLine(``"y = "` `+``             ``(Math.Round(slope_1 * 100.0) / 100.0) +``            ``"x "` `+ (Math.Round((``int``)g * 100.0) / 100.0));``        ``return``;``    ``}` `    ``// Special case when slope of``    ``// required line becomes infinity``    ``if` `(1 - Math.Tan(x) * given_slope == 0)``    ``{``         ``Console.WriteLine(``"x = "` `+``         ``(Math.Round(x1 * 100.0) / 100.0));``    ``}``    ``if` `(1 + Math.Tan(x) * given_slope == 0)``    ``{``        ``Console.WriteLine(``"x = "` `+``        ``(Math.Round(x1 * 100.0) / 100.0));``    ``}` `    ``// General case``    ``slope_1 = (given_slope + Math.Tan(x)) /``                 ``(1 - Math.Tan(x) * given_slope);``    ``slope_2 = (given_slope - Math.Tan(x)) /``                 ``(1 + Math.Tan(x) * given_slope);` `    ``// g and f are the variables``    ``// of required equations``    ``g = (``int``)x1;``    ``f = (``int``)x1;``    ``g *= (-slope_1);``    ``g += y1;` `    ``// Print first line equation``    ``if` `(g > 0 && 1 - Math.Tan(x) * given_slope != 0)``          ``Console.WriteLine(``"y = "` `+``          ``(Math.Round(slope_1 * 100.0) / 100.0) +``      ``"x +"` `+ (Math.Round((``int``)g * 100.0) / 100.0));``    ``if` `(g <= 0 && 1 - Math.Tan(x) * given_slope != 0)``       ``Console.WriteLine(``"y = "` `+``       ``(Math.Round(slope_1 * 100.0) / 100.0) +``      ``"x "` `+ (Math.Round((``int``)g * 100.0) / 100.0));``      ` `    ``f *= (-slope_2);``    ``f += y1;` `    ``// Print second line equation``    ``if` `(f > 0 && 1 + Math.Tan(x) * given_slope != 0)``    ``{``        ``Console.WriteLine(``"y = "` `+``        ``(Math.Round(slope_2 * 100.0) / 100.0) +``      ``"x +"` `+ (Math.Round((``int``)f * 100.0) / 100.0));``    ``}``    ``if` `(f <= 0 && 1 + Math.Tan(x) * given_slope != 0)``        ``Console.WriteLine(``"y = "` `+``        ``(Math.Round(slope_2 * 100.0) / 100.0) +``      ``"x +"` `+ (Math.Round((``int``)f * 100.0) / 100.0));``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ` `    ``// Given Input``    ``double` `a = 2, b = 3, c = -7;``    ``double` `x1 = 4, y1 = 9;``    ``double` `alfa = 30;``    ` `    ``// Function Call``    ``line_equation(a, b, c, x1, y1, alfa);``}``}` `// This code contributed by shikhasingrajput`
Output:
```y = -0.49x +10
y = -15.51x +71```

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

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up