Equation of a straight line passing through a point and making a given angle with a given line
Given four integers a, b, c 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 + 71Input: 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 <bits/stdc++.h> 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 |
Javascript
// JavaScript program for the above approach // Function to find slope of given line function 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 function line_equation(a, b, c, x1, y1, alfa) { // Store slope of given line let given_slope = line_slope(a, b); // Convert degrees to radians let 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 let slope_1 = Math.tan(x); let slope_2 = Math.tan(3.14159 - x); // g and f are the variables // of required equations let g = x1, f = x1; g = g*(-slope_1); g = g + y1; // Print first line equation if (g > 0) console.log( "y = " , slope_1.toFixed(2), "x +" , Math.floor(g)); if (g <= 0) console.log( "y = " , slope_1.toFixed(2), "x " , Math.floor(g)); f = f*(-slope_2); f = f+y1; // Print second line equation if (f > 0) { console.log( "y = " , slope_2.toFixed(2), "x +" , Math.floor(f)); } if (f <= 0){ console.log( "y = " , slope_2.toFixed(2), "x " , Math.floor(f)); } return ; } // Special case when slope of // required line becomes infinity if (1 - Math.tan(x) * given_slope == 0) { console.log( "x = " , x1.toFixed(2)); } if (1 + Math.tan(x) * given_slope == 0) { console.log( "x = " , x1.toFixed(2)); } // General case let slope_1 = (given_slope + Math.tan(x)) / (1 - Math.tan(x) * given_slope); let slope_2 = (given_slope - Math.tan(x)) / (1 + Math.tan(x) * given_slope); // g and f are the variables // of required equations let g = x1, f = x1; g *= (-slope_1); g += y1; // Print first line equation if (g > 0 && 1 - Math.tan(x) * given_slope != 0) console.log( "y = " , slope_1.toFixed(2), "x +" , Math.floor(g)); if (g <= 0 && 1 - tan(x) * given_slope != 0) console.log( "y = " , slope_1.toFixed(2), "x " , Math.floor(g)); f *= (-slope_2); f += y1; // Print second line equation if (f > 0 && 1 + Math.tan(x) * given_slope != 0) { console.log( "y = " , slope_2.toFixed(2), "x +" , Math.floor(f)); } if (f <= 0 && 1 + tan(x) * given_slope != 0) console.log( "y = " , slope_2.toFixed(2), "x " , Math.floor(f)); } // Driver Code // Given Input let a = 2, b = 3, c = -7; let x1 = 4, y1 = 9; let alfa = 30; // Function Call line_equation(a, b, c, x1, y1, alfa); // The code is contributed by Gautam goel (gautamgoel962) |
y = -0.49x +10 y = -15.51x +71
Time Complexity: O(1)
Auxiliary Space: O(1)
Please Login to comment...